From 105f7fbfaddd762455430bb787b2283d9b13899a Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sat, 26 Oct 2019 12:42:44 +0200 Subject: [PATCH] genesys: Add utility to restore stream state --- backend/genesys/utilities.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/backend/genesys/utilities.h b/backend/genesys/utilities.h index b0eb9318b..ffd0263d4 100644 --- a/backend/genesys/utilities.h +++ b/backend/genesys/utilities.h @@ -46,6 +46,7 @@ #include "error.h" #include +#include #include namespace genesys { @@ -83,6 +84,40 @@ void compute_array_percentile_approx(T* result, const T* data, } } +template +class BasicStreamStateSaver +{ +public: + explicit BasicStreamStateSaver(std::basic_ios& stream) : + stream_{stream} + { + flags_ = stream_.flags(); + width_ = stream_.width(); + precision_ = stream_.precision(); + fill_ = stream_.fill(); + } + + ~BasicStreamStateSaver() + { + stream_.flags(flags_); + stream_.width(width_); + stream_.precision(precision_); + stream_.fill(fill_); + } + + BasicStreamStateSaver(const BasicStreamStateSaver&) = delete; + BasicStreamStateSaver& operator=(const BasicStreamStateSaver&) = delete; + +private: + std::basic_ios& stream_; + std::ios_base::fmtflags flags_; + std::streamsize width_ = 0; + std::streamsize precision_ = 0; + Char fill_ = ' '; +}; + +using StreamStateSaver = BasicStreamStateSaver>; + } // namespace genesys #endif // BACKEND_GENESYS_UTILITIES_H