/*========================================================================= * * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ #ifndef itkStdStreamStateSave_h #define itkStdStreamStateSave_h #include #include #include "itkMacro.h" namespace itk { /** \class StdStreamStateSave * * \brief Save a stream's format state and restore it upon destruction * * An RAII class to provide an exception safe mechanism to restore the * format state of a stream. The class holds a resource (the stream's * format state) and resets the resource to a default state upon destruction. * * Typical usage: \code{.cpp} itk::StdStreamStateSave coutState(std::cout); std::cout.precision(20); std::cout.hex(); ... return; \endcode * * \ingroup ITKCommon */ class StdStreamStateSave { public: ITK_DISALLOW_COPY_AND_MOVE(StdStreamStateSave); explicit StdStreamStateSave(std::ios & stream) : m_Ios(stream) , m_State(nullptr) { m_State.copyfmt(stream); } ~StdStreamStateSave() { m_Ios.copyfmt(m_State); } private: std::ios & m_Ios; std::ios m_State; }; } // namespace itk #endif