Boost.Nowide
|
00001 // 00002 // Copyright (c) 2012 Artyom Beilis (Tonkikh) 00003 // 00004 // Distributed under the Boost Software License, Version 1.0. (See 00005 // accompanying file LICENSE_1_0.txt or copy at 00006 // http://www.boost.org/LICENSE_1_0.txt) 00007 // 00008 #ifndef BOOST_NOWIDE_IOSTREAM_HPP_INCLUDED 00009 #define BOOST_NOWIDE_IOSTREAM_HPP_INCLUDED 00010 00011 #include <boost/nowide/config.hpp> 00012 #include <boost/scoped_ptr.hpp> 00013 #include <iostream> 00014 #include <ostream> 00015 #include <istream> 00016 00017 #ifdef BOOST_MSVC 00018 # pragma warning(push) 00019 # pragma warning(disable : 4251) 00020 #endif 00021 00022 00023 namespace boost { 00024 namespace nowide { 00025 #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_DOXYGEN) 00026 using std::cout; 00027 using std::cerr; 00028 using std::cin; 00029 using std::clog; 00030 #else 00031 00033 namespace details { 00034 class console_output_buffer; 00035 class console_input_buffer; 00036 00037 class BOOST_NOWIDE_DECL winconsole_ostream : public std::ostream { 00038 winconsole_ostream(winconsole_ostream const &); 00039 void operator=(winconsole_ostream const &); 00040 public: 00041 winconsole_ostream(int fd); 00042 ~winconsole_ostream(); 00043 private: 00044 boost::scoped_ptr<console_output_buffer> d; 00045 }; 00046 00047 class BOOST_NOWIDE_DECL winconsole_istream : public std::istream { 00048 winconsole_istream(winconsole_istream const &); 00049 void operator=(winconsole_istream const &); 00050 public: 00051 00052 winconsole_istream(); 00053 ~winconsole_istream(); 00054 private: 00055 struct data; 00056 boost::scoped_ptr<console_input_buffer> d; 00057 }; 00058 } // details 00059 00061 00067 extern BOOST_NOWIDE_DECL details::winconsole_istream cin; 00073 extern BOOST_NOWIDE_DECL details::winconsole_ostream cout; 00079 extern BOOST_NOWIDE_DECL details::winconsole_ostream cerr; 00085 extern BOOST_NOWIDE_DECL details::winconsole_ostream clog; 00086 00087 #endif 00088 00089 } // nowide 00090 } // namespace boost 00091 00092 #ifdef BOOST_MSVC 00093 # pragma warning(pop) 00094 #endif 00095 00096 00097 #endif 00098 00099 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4