Boost.Nowide
boost/nowide/iostream.hpp
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