Blame view

3rdparty/boost_1_81_0/boost/optional/optional_io.hpp 1.78 KB
63e88f80   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
  // 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
  
  #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