genesys: Add utility to restore stream state

merge-requests/241/head
Povilas Kanapickas 2019-10-26 12:42:44 +02:00
rodzic aeadb8ef1e
commit 105f7fbfad
1 zmienionych plików z 35 dodań i 0 usunięć

Wyświetl plik

@ -46,6 +46,7 @@
#include "error.h"
#include <algorithm>
#include <iostream>
#include <vector>
namespace genesys {
@ -83,6 +84,40 @@ void compute_array_percentile_approx(T* result, const T* data,
}
}
template<class Char, class Traits>
class BasicStreamStateSaver
{
public:
explicit BasicStreamStateSaver(std::basic_ios<Char, Traits>& 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<Char, Traits>& stream_;
std::ios_base::fmtflags flags_;
std::streamsize width_ = 0;
std::streamsize precision_ = 0;
Char fill_ = ' ';
};
using StreamStateSaver = BasicStreamStateSaver<char, std::char_traits<char>>;
} // namespace genesys
#endif // BACKEND_GENESYS_UTILITIES_H