Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Panzer_IosAllSaver.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Panzer: A partial differential equation assembly
5 // engine for strongly coupled complex multiphysics systems
6 // Copyright (2011) Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39 // Eric C. Cyr (eccyr@sandia.gov)
40 // ***********************************************************************
41 // @HEADER
42 
43 // *******************************************************************
44 // This file contains a copy of one function from the io state saver
45 // code from boost. Modified to use the panzer namespace and remove
46 // locale support. Boost copyright is below.
47 // *******************************************************************
48 
49 // Copyright 2002, 2005 Daryle Walker. Use, modification, and distribution
50 // are subject to the Boost Software License, Version 1.0. (See accompanying
51 // file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
52 
53 // See <http://www.boost.org/libs/io/> for the library's home page.
54 
55 // *******************************************************************
56 // *******************************************************************
57 
58 #ifndef PANZER_IOS_ALL_SAVER_HPP
59 #define PANZER_IOS_ALL_SAVER_HPP
60 
61 #include "PanzerDiscFE_config.hpp"
62 #include <iomanip>
63 #include <iosfwd> // for std::char_traits (declaration)
64 
65 namespace panzer {
66 
67  template < typename Ch, class Tr = ::std::char_traits<Ch> >
69 
72 
73  template < typename Ch, class Tr >
75  {
76  public:
77  typedef ::std::basic_ios<Ch, Tr> state_type;
78 
80  : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )
81  , a3_save_( s.width() ), a4_save_( s.rdstate() )
82  , a5_save_( s.exceptions() ), a6_save_( s.tie() )
83  , a7_save_( s.rdbuf() ), a8_save_( s.fill() )
84  {}
85 
87  { this->restore(); }
88 
89  void restore()
90  {
91  s_save_.fill( a8_save_ );
92  s_save_.rdbuf( a7_save_ );
93  s_save_.tie( a6_save_ );
94  s_save_.exceptions( a5_save_ );
95  s_save_.clear( a4_save_ );
96  s_save_.width( a3_save_ );
97  s_save_.precision( a2_save_ );
98  s_save_.flags( a1_save_ );
99  }
100 
101  private:
103  typename state_type::fmtflags const a1_save_;
104  ::std::streamsize const a2_save_;
105  ::std::streamsize const a3_save_;
106  typename state_type::iostate const a4_save_;
107  typename state_type::iostate const a5_save_;
108  ::std::basic_ostream<Ch, Tr> * const a6_save_;
109  ::std::basic_streambuf<Ch, Tr> * const a7_save_;
110  typename state_type::char_type const a8_save_;
111 
113  };
114 
115 }
116 
117 #endif
basic_ios_all_saver< wchar_t > wios_all_saver
basic_ios_all_saver & operator=(const basic_ios_all_saver &)
state_type::char_type const a8_save_
basic_ios_all_saver< char > ios_all_saver
::std::basic_ios< Ch, Tr > state_type
::std::streamsize const a2_save_
state_type::fmtflags const a1_save_
state_type::iostate const a4_save_
::std::streamsize const a3_save_
state_type::iostate const a5_save_
::std::basic_ostream< Ch, Tr > *const a6_save_
::std::basic_streambuf< Ch, Tr > *const a7_save_