// Save & change and restore stream properties void saver_tests_2 ( std::istream & input, std::ostream & output, std::ostream & err ) { using std::locale; using std::ios_base; boost::io::ios_tie_saver const its( input, &err ); boost::io::ios_rdbuf_saver const irs( output, err.rdbuf() ); boost::io::ios_iword_saver const iis( output, my_index, 69L ); boost::io::ios_pword_saver const ipws( output, my_index, &err ); output << "The data is (a third time; adding the numbers):\n"; boost::io::ios_flags_saver const ifls( output, (output.flags() & ~ios_base::adjustfield) | ios_base::showpos | ios_base::boolalpha | (ios_base::internal & ios_base::adjustfield) ); boost::io::ios_precision_saver const iprs( output, 9 ); boost::io::ios_fill_saver const ifis( output, '@' ); output << '\t' << test_string << '\n'; boost::io::ios_width_saver const iws( output, 12 ); output.put( '\t' ); output << test_num1 + test_num2; output.put( '\n' ); locale loc( locale::classic(), new backward_bool_names ); boost::io::ios_locale_saver const ils( output, loc ); output << '\t' << test_bool << '\n'; BOOST_CHECK( &err == output.pword(my_index) ); BOOST_CHECK( 69L == output.iword(my_index) ); try { boost::io::ios_exception_saver const ies( output, ios_base::eofbit ); boost::io::ios_iostate_saver const iis( output, output.rdstate() | ios_base::eofbit ); BOOST_ERROR( "previous line should have thrown" ); } catch ( ios_base::failure &f ) { err << "Got the expected I/O failure: \"" << f.what() << "\".\n"; BOOST_CHECK( output.exceptions() == ios_base::goodbit ); } catch ( ... ) { err << "Got an unknown error when doing exception test!\n"; throw; } }
// Save, change, and restore stream properties void saver_tests_1 ( std::istream & input, std::ostream & output, std::ostream & err ) { using std::locale; using std::ios_base; using std::setw; boost::io::ios_flags_saver const ifls( output ); boost::io::ios_precision_saver const iprs( output ); boost::io::ios_width_saver const iws( output ); boost::io::ios_tie_saver const its( input ); boost::io::ios_rdbuf_saver const irs( output ); boost::io::ios_fill_saver const ifis( output ); boost::io::ios_locale_saver const ils( output ); boost::io::ios_iword_saver const iis( output, my_index ); boost::io::ios_pword_saver const ipws( output, my_index ); locale loc( locale::classic(), new backward_bool_names ); input.tie( &err ); output.rdbuf( err.rdbuf() ); output.iword( my_index ) = 69L; output.pword( my_index ) = &err; output << "The data is (again):\n"; output.setf( ios_base::showpos | ios_base::boolalpha ); output.setf( ios_base::internal, ios_base::adjustfield ); output.fill( '@' ); output.precision( 9 ); output << '\t' << test_string << '\n'; output << '\t' << setw( 10 ) << test_num1 << '\n'; output << '\t' << setw( 15 ) << test_num2 << '\n'; output.imbue( loc ); output << '\t' << test_bool << '\n'; BOOST_CHECK( &err == output.pword(my_index) ); BOOST_CHECK( 69L == output.iword(my_index) ); try { boost::io::ios_exception_saver const ies( output ); boost::io::ios_iostate_saver const iis( output ); output.exceptions( ios_base::eofbit ); output.setstate( ios_base::eofbit ); BOOST_ERROR( "previous line should have thrown" ); } catch ( ios_base::failure &f ) { err << "Got the expected I/O failure: \"" << f.what() << "\".\n"; BOOST_CHECK( output.exceptions() == ios_base::goodbit ); } catch ( ... ) { err << "Got an unknown error when doing exception test!\n"; throw; } }