1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- // 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:
- // [email protected]
- //
- #ifndef BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
- #define BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
- #ifndef BOOST_NO_IOSTREAM
- #include <istream>
- #include <ostream>
- #include "boost/none.hpp"
- #include "boost/optional/optional.hpp"
- namespace boost
- {
- template<class CharType, class CharTrait>
- inline
- std::basic_ostream<CharType, CharTrait>&
- operator<<(std::basic_ostream<CharType, CharTrait>& out, none_t)
- {
- if (out.good())
- {
- out << "--";
- }
- return out;
- }
- template<class CharType, class CharTrait, class T>
- inline
- std::basic_ostream<CharType, CharTrait>&
- operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v)
- {
- if (out.good())
- {
- if (!v)
- out << "--" ;
- else out << ' ' << *v ;
- }
- return out;
- }
- template<class CharType, class CharTrait, class T>
- inline
- std::basic_istream<CharType, CharTrait>&
- operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v)
- {
- if (in.good())
- {
- int d = in.get();
- if (d == ' ')
- {
- T x;
- in >> x;
- #ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
- v = boost::move(x);
- #else
- v = x;
- #endif
- }
- else
- {
- if (d == '-')
- {
- d = in.get();
- if (d == '-')
- {
- v = none;
- return in;
- }
- }
- in.setstate( std::ios::failbit );
- }
- }
- return in;
- }
- } // namespace boost
- #endif // BOOST_NO_IOSTREAM
- #endif
|