Blame view

3rdparty/boost_1_81_0/boost/nowide/iostream.hpp 2.88 KB
598bfd3f   Hu Chunming   提交_GLIBCXX_USE_CX...
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
96
97
98
99
100
101
102
103
104
105
  // Copyright (c) 2012 Artyom Beilis (Tonkikh)
  // Copyright (c) 2020-2021 Alexander Grund
  //
  // Distributed under the Boost Software License, Version 1.0.
  // https://www.boost.org/LICENSE_1_0.txt
  
  #ifndef BOOST_NOWIDE_IOSTREAM_HPP_INCLUDED
  #define BOOST_NOWIDE_IOSTREAM_HPP_INCLUDED
  
  #include <boost/nowide/config.hpp>
  #ifdef BOOST_WINDOWS
  #include <istream>
  #include <memory>
  #include <ostream>
  
  #include <boost/config/abi_prefix.hpp> // must be the last #include
  #else
  #include <iostream>
  #endif
  
  #ifdef BOOST_MSVC
  #pragma warning(push)
  #pragma warning(disable : 4251)
  #endif
  
  namespace boost {
  namespace nowide {
  #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_DOXYGEN)
      using std::cout;
      using std::cerr;
      using std::cin;
      using std::clog;
  #else
  
      /// \cond INTERNAL
      namespace detail {
          class console_output_buffer;
          class console_input_buffer;
  
          class BOOST_NOWIDE_DECL winconsole_ostream : public std::ostream
          {
          public:
              winconsole_ostream(bool isBuffered, winconsole_ostream* tieStream);
              ~winconsole_ostream();
  
          private:
              std::unique_ptr<console_output_buffer> d;
              // Ensure the std streams are initialized and alive during the lifetime of this instance
              std::ios_base::Init init_;
          };
  
          class BOOST_NOWIDE_DECL winconsole_istream : public std::istream
          {
          public:
              explicit winconsole_istream(winconsole_ostream* tieStream);
              ~winconsole_istream();
  
          private:
              std::unique_ptr<console_input_buffer> d;
              // Ensure the std streams are initialized and alive during the lifetime of this instance
              std::ios_base::Init init_;
          };
      } // namespace detail
  
      /// \endcond
  
      ///
      /// \brief Same as std::cin, but uses UTF-8
      ///
      /// Note, the stream is not synchronized with stdio and not affected by std::ios::sync_with_stdio
      ///
      extern BOOST_NOWIDE_DECL detail::winconsole_istream cin;
      ///
      /// \brief Same as std::cout, but uses UTF-8
      ///
      /// Note, the stream is not synchronized with stdio and not affected by std::ios::sync_with_stdio
      ///
      extern BOOST_NOWIDE_DECL detail::winconsole_ostream cout;
      ///
      /// \brief Same as std::cerr, but uses UTF-8
      ///
      /// Note, the stream is not synchronized with stdio and not affected by std::ios::sync_with_stdio
      ///
      extern BOOST_NOWIDE_DECL detail::winconsole_ostream cerr;
      ///
      /// \brief Same as std::clog, but uses UTF-8
      ///
      /// Note, the stream is not synchronized with stdio and not affected by std::ios::sync_with_stdio
      ///
      extern BOOST_NOWIDE_DECL detail::winconsole_ostream clog;
  
  #endif
  
  } // namespace nowide
  } // namespace boost
  
  #ifdef BOOST_MSVC
  #pragma warning(pop)
  #endif
  
  #ifdef BOOST_WINDOWS
  #include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
  #endif
  
  #endif