imgtools/imglib/boostlibrary/boost/optional/optional_io.hpp
changeset 600 6d08f4a05d93
equal deleted inserted replaced
599:fa7a3cc6effd 600:6d08f4a05d93
       
     1 // Copyright (C) 2005, Fernando Luis Cacciola Carballal.
       
     2 //
       
     3 // Use, modification, and distribution is subject to the Boost Software
       
     4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
       
     5 // http://www.boost.org/LICENSE_1_0.txt)
       
     6 //
       
     7 // See http://www.boost.org/lib/optional for documentation.
       
     8 //
       
     9 // You are welcome to contact the author at:
       
    10 //  fernando_cacciola@hotmail.com
       
    11 //
       
    12 #ifndef BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
       
    13 #define BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
       
    14 
       
    15 #if defined __GNUC__
       
    16 #  if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97) 
       
    17 #    define BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
       
    18 #  endif
       
    19 #endif // __GNUC__
       
    20 
       
    21 #if defined BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
       
    22 #  include <iostream>
       
    23 #else 
       
    24 #  include <istream>
       
    25 #  include <ostream>
       
    26 #endif  
       
    27 
       
    28 
       
    29 #include "boost/optional/optional.hpp"
       
    30 #include "boost/utility/value_init.hpp"
       
    31 
       
    32 namespace boost
       
    33 {
       
    34 
       
    35 #if defined (BOOST_NO_TEMPLATED_STREAMS)
       
    36 template<class T>
       
    37 inline std::ostream& operator<<(std::ostream& out, optional<T> const& v)
       
    38 #else
       
    39 template<class CharType, class CharTrait, class T>
       
    40 inline
       
    41 std::basic_ostream<CharType, CharTrait>&
       
    42 operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v)
       
    43 #endif
       
    44 {
       
    45   if ( out.good() )
       
    46   {
       
    47     if ( !v )
       
    48          out << "--" ;
       
    49     else out << ' ' << *v ;
       
    50   }
       
    51 
       
    52   return out;
       
    53 }
       
    54 
       
    55 #if defined (BOOST_NO_TEMPLATED_STREAMS)
       
    56 template<class T>
       
    57 inline std::istream& operator>>(std::istream& in, optional<T>& v)
       
    58 #else
       
    59 template<class CharType, class CharTrait, class T>
       
    60 inline
       
    61 std::basic_istream<CharType, CharTrait>&
       
    62 operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v)
       
    63 #endif
       
    64 {
       
    65   if ( in.good() )
       
    66   {
       
    67     int d = in.get();
       
    68     if ( d == ' ' )
       
    69     {
       
    70       T x ;
       
    71       in >> x;
       
    72       v = x ;
       
    73     }
       
    74     else
       
    75       v = optional<T>() ;
       
    76   }
       
    77 
       
    78   return in;
       
    79 }
       
    80 
       
    81 } // namespace boost
       
    82 
       
    83 #endif
       
    84