1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // Copyright (C) 2005, Fernando Luis Cacciola Carballal.
- //
- // Use, modification, and distribution is subject to the Boost Software
- // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- // See http://www.boost.org/libs/optional for documentation.
- //
- // You are welcome to contact the author at:
- // fernando_cacciola@hotmail.com
- //
- #ifndef BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
- #define BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
- #if defined __GNUC__
- # if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97)
- # define BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
- # endif
- #endif // __GNUC__
- #if defined BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
- # include <iostream>
- #else
- # include <istream>
- # include <ostream>
- #endif
- #include <boost/none.hpp>
- #include <boost/assert.hpp>
- #include "boost/optional/optional.hpp"
- #include "boost/utility/value_init.hpp"
- namespace boost
- {
- #if defined (BOOST_NO_TEMPLATED_STREAMS)
- template<class T>
- inline std::ostream& operator<<(std::ostream& out, optional<T> const& v)
- #else
- template<class CharType, class CharTrait, class T>
- inline
- std::basic_ostream<CharType, CharTrait>&
- operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v)
- #endif
- {
- if ( out.good() )
- {
- if ( !v )
- out << "--" ;
- else out << ' ' << *v ;
- }
- return out;
- }
- #if defined (BOOST_NO_TEMPLATED_STREAMS)
- template<class T>
- inline std::istream& operator>>(std::istream& in, optional<T>& v)
- #else
- template<class CharType, class CharTrait, class T>
- inline
- std::basic_istream<CharType, CharTrait>&
- operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v)
- #endif
- {
- if (in.good())
- {
- int d = in.get();
- if (d == ' ')
- {
- T x;
- in >> x;
- v = x;
- }
- else
- {
- if (d == '-')
- {
- d = in.get();
- if (d == '-')
- {
- v = none;
- return in;
- }
- }
- in.setstate( std::ios::failbit );
- }
- }
- return in;
- }
- } // namespace boost
- #endif
|