annotate DEPENDENCIES/generic/include/boost/io/ios_state.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // Boost io/ios_state.hpp header file --------------------------------------//
Chris@16 2
Chris@16 3 // Copyright 2002, 2005 Daryle Walker. Use, modification, and distribution
Chris@16 4 // are subject to the Boost Software License, Version 1.0. (See accompanying
Chris@16 5 // file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
Chris@16 6
Chris@16 7 // See <http://www.boost.org/libs/io/> for the library's home page.
Chris@16 8
Chris@16 9 #ifndef BOOST_IO_IOS_STATE_HPP
Chris@16 10 #define BOOST_IO_IOS_STATE_HPP
Chris@16 11
Chris@16 12 #include <boost/io_fwd.hpp> // self include
Chris@16 13 #include <boost/detail/workaround.hpp>
Chris@16 14
Chris@16 15 #include <ios> // for std::ios_base, std::basic_ios, etc.
Chris@16 16 #ifndef BOOST_NO_STD_LOCALE
Chris@16 17 #include <locale> // for std::locale
Chris@16 18 #endif
Chris@16 19 #include <ostream> // for std::basic_ostream
Chris@16 20 #include <streambuf> // for std::basic_streambuf
Chris@16 21 #include <string> // for std::char_traits
Chris@16 22
Chris@16 23
Chris@16 24 namespace boost
Chris@16 25 {
Chris@16 26 namespace io
Chris@16 27 {
Chris@16 28
Chris@16 29
Chris@16 30 // Basic stream state saver class declarations -----------------------------//
Chris@16 31
Chris@16 32 class ios_flags_saver
Chris@16 33 {
Chris@16 34 public:
Chris@16 35 typedef ::std::ios_base state_type;
Chris@16 36 typedef ::std::ios_base::fmtflags aspect_type;
Chris@16 37
Chris@16 38 explicit ios_flags_saver( state_type &s )
Chris@16 39 : s_save_( s ), a_save_( s.flags() )
Chris@16 40 {}
Chris@16 41 ios_flags_saver( state_type &s, aspect_type const &a )
Chris@16 42 : s_save_( s ), a_save_( s.flags(a) )
Chris@16 43 {}
Chris@16 44 ~ios_flags_saver()
Chris@16 45 { this->restore(); }
Chris@16 46
Chris@16 47 void restore()
Chris@16 48 { s_save_.flags( a_save_ ); }
Chris@16 49
Chris@16 50 private:
Chris@16 51 state_type & s_save_;
Chris@16 52 aspect_type const a_save_;
Chris@16 53
Chris@16 54 ios_flags_saver& operator=(const ios_flags_saver&);
Chris@16 55 };
Chris@16 56
Chris@16 57 class ios_precision_saver
Chris@16 58 {
Chris@16 59 public:
Chris@16 60 typedef ::std::ios_base state_type;
Chris@16 61 typedef ::std::streamsize aspect_type;
Chris@16 62
Chris@16 63 explicit ios_precision_saver( state_type &s )
Chris@16 64 : s_save_( s ), a_save_( s.precision() )
Chris@16 65 {}
Chris@16 66 ios_precision_saver( state_type &s, aspect_type const &a )
Chris@16 67 : s_save_( s ), a_save_( s.precision(a) )
Chris@16 68 {}
Chris@16 69 ~ios_precision_saver()
Chris@16 70 { this->restore(); }
Chris@16 71
Chris@16 72 void restore()
Chris@16 73 { s_save_.precision( a_save_ ); }
Chris@16 74
Chris@16 75 private:
Chris@16 76 state_type & s_save_;
Chris@16 77 aspect_type const a_save_;
Chris@16 78
Chris@16 79 ios_precision_saver& operator=(const ios_precision_saver&);
Chris@16 80 };
Chris@16 81
Chris@16 82 class ios_width_saver
Chris@16 83 {
Chris@16 84 public:
Chris@16 85 typedef ::std::ios_base state_type;
Chris@16 86 typedef ::std::streamsize aspect_type;
Chris@16 87
Chris@16 88 explicit ios_width_saver( state_type &s )
Chris@16 89 : s_save_( s ), a_save_( s.width() )
Chris@16 90 {}
Chris@16 91 ios_width_saver( state_type &s, aspect_type const &a )
Chris@16 92 : s_save_( s ), a_save_( s.width(a) )
Chris@16 93 {}
Chris@16 94 ~ios_width_saver()
Chris@16 95 { this->restore(); }
Chris@16 96
Chris@16 97 void restore()
Chris@16 98 { s_save_.width( a_save_ ); }
Chris@16 99
Chris@16 100 private:
Chris@16 101 state_type & s_save_;
Chris@16 102 aspect_type const a_save_;
Chris@16 103 ios_width_saver& operator=(const ios_width_saver&);
Chris@16 104 };
Chris@16 105
Chris@16 106
Chris@16 107 // Advanced stream state saver class template declarations -----------------//
Chris@16 108
Chris@16 109 template < typename Ch, class Tr >
Chris@16 110 class basic_ios_iostate_saver
Chris@16 111 {
Chris@16 112 public:
Chris@16 113 typedef ::std::basic_ios<Ch, Tr> state_type;
Chris@16 114 typedef ::std::ios_base::iostate aspect_type;
Chris@16 115
Chris@16 116 explicit basic_ios_iostate_saver( state_type &s )
Chris@16 117 : s_save_( s ), a_save_( s.rdstate() )
Chris@16 118 {}
Chris@16 119 basic_ios_iostate_saver( state_type &s, aspect_type const &a )
Chris@16 120 : s_save_( s ), a_save_( s.rdstate() )
Chris@16 121 { s.clear(a); }
Chris@16 122 ~basic_ios_iostate_saver()
Chris@16 123 { this->restore(); }
Chris@16 124
Chris@16 125 void restore()
Chris@16 126 { s_save_.clear( a_save_ ); }
Chris@16 127
Chris@16 128 private:
Chris@16 129 state_type & s_save_;
Chris@16 130 aspect_type const a_save_;
Chris@16 131 basic_ios_iostate_saver& operator=(const basic_ios_iostate_saver&);
Chris@16 132 };
Chris@16 133
Chris@16 134 template < typename Ch, class Tr >
Chris@16 135 class basic_ios_exception_saver
Chris@16 136 {
Chris@16 137 public:
Chris@16 138 typedef ::std::basic_ios<Ch, Tr> state_type;
Chris@16 139 typedef ::std::ios_base::iostate aspect_type;
Chris@16 140
Chris@16 141 explicit basic_ios_exception_saver( state_type &s )
Chris@16 142 : s_save_( s ), a_save_( s.exceptions() )
Chris@16 143 {}
Chris@16 144 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
Chris@16 145 basic_ios_exception_saver( state_type &s, aspect_type a )
Chris@16 146 #else
Chris@16 147 basic_ios_exception_saver( state_type &s, aspect_type const &a )
Chris@16 148 #endif
Chris@16 149 : s_save_( s ), a_save_( s.exceptions() )
Chris@16 150 { s.exceptions(a); }
Chris@16 151 ~basic_ios_exception_saver()
Chris@16 152 { this->restore(); }
Chris@16 153
Chris@16 154 void restore()
Chris@16 155 { s_save_.exceptions( a_save_ ); }
Chris@16 156
Chris@16 157 private:
Chris@16 158 state_type & s_save_;
Chris@16 159 aspect_type const a_save_;
Chris@16 160 basic_ios_exception_saver& operator=(const basic_ios_exception_saver&);
Chris@16 161 };
Chris@16 162
Chris@16 163 template < typename Ch, class Tr >
Chris@16 164 class basic_ios_tie_saver
Chris@16 165 {
Chris@16 166 public:
Chris@16 167 typedef ::std::basic_ios<Ch, Tr> state_type;
Chris@16 168 typedef ::std::basic_ostream<Ch, Tr> * aspect_type;
Chris@16 169
Chris@16 170 explicit basic_ios_tie_saver( state_type &s )
Chris@16 171 : s_save_( s ), a_save_( s.tie() )
Chris@16 172 {}
Chris@16 173 basic_ios_tie_saver( state_type &s, aspect_type const &a )
Chris@16 174 : s_save_( s ), a_save_( s.tie(a) )
Chris@16 175 {}
Chris@16 176 ~basic_ios_tie_saver()
Chris@16 177 { this->restore(); }
Chris@16 178
Chris@16 179 void restore()
Chris@16 180 { s_save_.tie( a_save_ ); }
Chris@16 181
Chris@16 182 private:
Chris@16 183 state_type & s_save_;
Chris@16 184 aspect_type const a_save_;
Chris@16 185 basic_ios_tie_saver& operator=(const basic_ios_tie_saver&);
Chris@16 186 };
Chris@16 187
Chris@16 188 template < typename Ch, class Tr >
Chris@16 189 class basic_ios_rdbuf_saver
Chris@16 190 {
Chris@16 191 public:
Chris@16 192 typedef ::std::basic_ios<Ch, Tr> state_type;
Chris@16 193 typedef ::std::basic_streambuf<Ch, Tr> * aspect_type;
Chris@16 194
Chris@16 195 explicit basic_ios_rdbuf_saver( state_type &s )
Chris@16 196 : s_save_( s ), a_save_( s.rdbuf() )
Chris@16 197 {}
Chris@16 198 basic_ios_rdbuf_saver( state_type &s, aspect_type const &a )
Chris@16 199 : s_save_( s ), a_save_( s.rdbuf(a) )
Chris@16 200 {}
Chris@16 201 ~basic_ios_rdbuf_saver()
Chris@16 202 { this->restore(); }
Chris@16 203
Chris@16 204 void restore()
Chris@16 205 { s_save_.rdbuf( a_save_ ); }
Chris@16 206
Chris@16 207 private:
Chris@16 208 state_type & s_save_;
Chris@16 209 aspect_type const a_save_;
Chris@16 210 basic_ios_rdbuf_saver& operator=(const basic_ios_rdbuf_saver&);
Chris@16 211 };
Chris@16 212
Chris@16 213 template < typename Ch, class Tr >
Chris@16 214 class basic_ios_fill_saver
Chris@16 215 {
Chris@16 216 public:
Chris@16 217 typedef ::std::basic_ios<Ch, Tr> state_type;
Chris@16 218 typedef typename state_type::char_type aspect_type;
Chris@16 219
Chris@16 220 explicit basic_ios_fill_saver( state_type &s )
Chris@16 221 : s_save_( s ), a_save_( s.fill() )
Chris@16 222 {}
Chris@16 223 basic_ios_fill_saver( state_type &s, aspect_type const &a )
Chris@16 224 : s_save_( s ), a_save_( s.fill(a) )
Chris@16 225 {}
Chris@16 226 ~basic_ios_fill_saver()
Chris@16 227 { this->restore(); }
Chris@16 228
Chris@16 229 void restore()
Chris@16 230 { s_save_.fill( a_save_ ); }
Chris@16 231
Chris@16 232 private:
Chris@16 233 state_type & s_save_;
Chris@16 234 aspect_type const a_save_;
Chris@16 235 basic_ios_fill_saver& operator=(const basic_ios_fill_saver&);
Chris@16 236 };
Chris@16 237
Chris@16 238 #ifndef BOOST_NO_STD_LOCALE
Chris@16 239 template < typename Ch, class Tr >
Chris@16 240 class basic_ios_locale_saver
Chris@16 241 {
Chris@16 242 public:
Chris@16 243 typedef ::std::basic_ios<Ch, Tr> state_type;
Chris@16 244 typedef ::std::locale aspect_type;
Chris@16 245
Chris@16 246 explicit basic_ios_locale_saver( state_type &s )
Chris@16 247 : s_save_( s ), a_save_( s.getloc() )
Chris@16 248 {}
Chris@16 249 basic_ios_locale_saver( state_type &s, aspect_type const &a )
Chris@16 250 : s_save_( s ), a_save_( s.imbue(a) )
Chris@16 251 {}
Chris@16 252 ~basic_ios_locale_saver()
Chris@16 253 { this->restore(); }
Chris@16 254
Chris@16 255 void restore()
Chris@16 256 { s_save_.imbue( a_save_ ); }
Chris@16 257
Chris@16 258 private:
Chris@16 259 state_type & s_save_;
Chris@16 260 aspect_type const a_save_;
Chris@16 261 basic_ios_locale_saver& operator=(const basic_ios_locale_saver&);
Chris@16 262 };
Chris@16 263 #endif
Chris@16 264
Chris@16 265
Chris@16 266 // User-defined stream state saver class declarations ----------------------//
Chris@16 267
Chris@16 268 class ios_iword_saver
Chris@16 269 {
Chris@16 270 public:
Chris@16 271 typedef ::std::ios_base state_type;
Chris@16 272 typedef int index_type;
Chris@16 273 typedef long aspect_type;
Chris@16 274
Chris@16 275 explicit ios_iword_saver( state_type &s, index_type i )
Chris@16 276 : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )
Chris@16 277 {}
Chris@16 278 ios_iword_saver( state_type &s, index_type i, aspect_type const &a )
Chris@16 279 : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )
Chris@16 280 { s.iword(i) = a; }
Chris@16 281 ~ios_iword_saver()
Chris@16 282 { this->restore(); }
Chris@16 283
Chris@16 284 void restore()
Chris@16 285 { s_save_.iword( i_save_ ) = a_save_; }
Chris@16 286
Chris@16 287 private:
Chris@16 288 state_type & s_save_;
Chris@16 289 aspect_type const a_save_;
Chris@16 290 index_type const i_save_;
Chris@16 291
Chris@16 292 ios_iword_saver& operator=(const ios_iword_saver&);
Chris@16 293 };
Chris@16 294
Chris@16 295 class ios_pword_saver
Chris@16 296 {
Chris@16 297 public:
Chris@16 298 typedef ::std::ios_base state_type;
Chris@16 299 typedef int index_type;
Chris@16 300 typedef void * aspect_type;
Chris@16 301
Chris@16 302 explicit ios_pword_saver( state_type &s, index_type i )
Chris@16 303 : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )
Chris@16 304 {}
Chris@16 305 ios_pword_saver( state_type &s, index_type i, aspect_type const &a )
Chris@16 306 : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )
Chris@16 307 { s.pword(i) = a; }
Chris@16 308 ~ios_pword_saver()
Chris@16 309 { this->restore(); }
Chris@16 310
Chris@16 311 void restore()
Chris@16 312 { s_save_.pword( i_save_ ) = a_save_; }
Chris@16 313
Chris@16 314 private:
Chris@16 315 state_type & s_save_;
Chris@16 316 aspect_type const a_save_;
Chris@16 317 index_type const i_save_;
Chris@16 318
Chris@16 319 ios_pword_saver operator=(const ios_pword_saver&);
Chris@16 320 };
Chris@16 321
Chris@16 322
Chris@16 323 // Combined stream state saver class (template) declarations ---------------//
Chris@16 324
Chris@16 325 class ios_base_all_saver
Chris@16 326 {
Chris@16 327 public:
Chris@16 328 typedef ::std::ios_base state_type;
Chris@16 329
Chris@16 330 explicit ios_base_all_saver( state_type &s )
Chris@16 331 : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )
Chris@16 332 , a3_save_( s.width() )
Chris@16 333 {}
Chris@16 334
Chris@16 335 ~ios_base_all_saver()
Chris@16 336 { this->restore(); }
Chris@16 337
Chris@16 338 void restore()
Chris@16 339 {
Chris@16 340 s_save_.width( a3_save_ );
Chris@16 341 s_save_.precision( a2_save_ );
Chris@16 342 s_save_.flags( a1_save_ );
Chris@16 343 }
Chris@16 344
Chris@16 345 private:
Chris@16 346 state_type & s_save_;
Chris@16 347 state_type::fmtflags const a1_save_;
Chris@16 348 ::std::streamsize const a2_save_;
Chris@16 349 ::std::streamsize const a3_save_;
Chris@16 350
Chris@16 351 ios_base_all_saver& operator=(const ios_base_all_saver&);
Chris@16 352 };
Chris@16 353
Chris@16 354 template < typename Ch, class Tr >
Chris@16 355 class basic_ios_all_saver
Chris@16 356 {
Chris@16 357 public:
Chris@16 358 typedef ::std::basic_ios<Ch, Tr> state_type;
Chris@16 359
Chris@16 360 explicit basic_ios_all_saver( state_type &s )
Chris@16 361 : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )
Chris@16 362 , a3_save_( s.width() ), a4_save_( s.rdstate() )
Chris@16 363 , a5_save_( s.exceptions() ), a6_save_( s.tie() )
Chris@16 364 , a7_save_( s.rdbuf() ), a8_save_( s.fill() )
Chris@16 365 #ifndef BOOST_NO_STD_LOCALE
Chris@16 366 , a9_save_( s.getloc() )
Chris@16 367 #endif
Chris@16 368 {}
Chris@16 369
Chris@16 370 ~basic_ios_all_saver()
Chris@16 371 { this->restore(); }
Chris@16 372
Chris@16 373 void restore()
Chris@16 374 {
Chris@16 375 #ifndef BOOST_NO_STD_LOCALE
Chris@16 376 s_save_.imbue( a9_save_ );
Chris@16 377 #endif
Chris@16 378 s_save_.fill( a8_save_ );
Chris@16 379 s_save_.rdbuf( a7_save_ );
Chris@16 380 s_save_.tie( a6_save_ );
Chris@16 381 s_save_.exceptions( a5_save_ );
Chris@16 382 s_save_.clear( a4_save_ );
Chris@16 383 s_save_.width( a3_save_ );
Chris@16 384 s_save_.precision( a2_save_ );
Chris@16 385 s_save_.flags( a1_save_ );
Chris@16 386 }
Chris@16 387
Chris@16 388 private:
Chris@16 389 state_type & s_save_;
Chris@16 390 typename state_type::fmtflags const a1_save_;
Chris@16 391 ::std::streamsize const a2_save_;
Chris@16 392 ::std::streamsize const a3_save_;
Chris@16 393 typename state_type::iostate const a4_save_;
Chris@16 394 typename state_type::iostate const a5_save_;
Chris@16 395 ::std::basic_ostream<Ch, Tr> * const a6_save_;
Chris@16 396 ::std::basic_streambuf<Ch, Tr> * const a7_save_;
Chris@16 397 typename state_type::char_type const a8_save_;
Chris@16 398 #ifndef BOOST_NO_STD_LOCALE
Chris@16 399 ::std::locale const a9_save_;
Chris@16 400 #endif
Chris@16 401
Chris@16 402 basic_ios_all_saver& operator=(const basic_ios_all_saver&);
Chris@16 403 };
Chris@16 404
Chris@16 405 class ios_all_word_saver
Chris@16 406 {
Chris@16 407 public:
Chris@16 408 typedef ::std::ios_base state_type;
Chris@16 409 typedef int index_type;
Chris@16 410
Chris@16 411 ios_all_word_saver( state_type &s, index_type i )
Chris@16 412 : s_save_( s ), i_save_( i ), a1_save_( s.iword(i) )
Chris@16 413 , a2_save_( s.pword(i) )
Chris@16 414 {}
Chris@16 415
Chris@16 416 ~ios_all_word_saver()
Chris@16 417 { this->restore(); }
Chris@16 418
Chris@16 419 void restore()
Chris@16 420 {
Chris@16 421 s_save_.pword( i_save_ ) = a2_save_;
Chris@16 422 s_save_.iword( i_save_ ) = a1_save_;
Chris@16 423 }
Chris@16 424
Chris@16 425 private:
Chris@16 426 state_type & s_save_;
Chris@16 427 index_type const i_save_;
Chris@16 428 long const a1_save_;
Chris@16 429 void * const a2_save_;
Chris@16 430
Chris@16 431 ios_all_word_saver& operator=(const ios_all_word_saver&);
Chris@16 432 };
Chris@16 433
Chris@16 434
Chris@16 435 } // namespace io
Chris@16 436 } // namespace boost
Chris@16 437
Chris@16 438
Chris@16 439 #endif // BOOST_IO_IOS_STATE_HPP