#ifndef VTR_OSTREAM_GUARD_H
#define VTR_OSTREAM_GUARD_H

namespace vtr {

//A RAII guard class to ensure restoration of output stream format
class OsFormatGuard {
  public:
    explicit OsFormatGuard(std::ostream& os)
        : os_(os)
        , flags_(os_.flags()) //Save formatting flag state
        , width_(os_.width())
        , precision_(os.precision())
        , fill_(os.fill()) {}

    ~OsFormatGuard() {
        os_.flags(flags_); //Restore
        os_.width(width_);
        os_.precision(precision_);
        os_.fill(fill_);
    }

    OsFormatGuard(const OsFormatGuard&) = delete;
    OsFormatGuard& operator=(const OsFormatGuard&) = delete;
    OsFormatGuard(const OsFormatGuard&&) = delete;
    OsFormatGuard& operator=(const OsFormatGuard&&) = delete;

  private:
    std::ostream& os_;
    std::ios::fmtflags flags_;
    std::streamsize width_;
    std::streamsize precision_;
    char fill_;
};

} // namespace vtr

#endif
