boost/test/detail/wrap_stringstream.hpp
// (C) Copyright Gennadiy Rozental 2002-2003. // Use, modification, and distribution are 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/test for the library home page. // // File : $RCSfile: wrap_stringstream.hpp,v $ // // Version : $Revision: 1.9 $ // // Description : wraps strstream and stringstream (depends with one is present ) // to prodive the unified interface // *************************************************************************** #ifndef BOOST_WRAP_STRINGSTREAM_HPP #define BOOST_WRAP_STRINGSTREAM_HPP // STL #ifdef BOOST_NO_STRINGSTREAM #include <strstream> // for std::ostrstream #else #include <sstream> // for std::ostringstream #endif // BOOST_NO_STRINGSTREAM #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable: 4511) // copy constructor could not be generated # pragma warning(disable: 4512) // assignment operator could not be generated #endif namespace boost { // ************************************************************************** // // ************** wrap_stringstream ************** // // ************************************************************************** // class wrap_stringstream { #ifdef BOOST_NO_STRINGSTREAM typedef std::ostrstream wrapped_stream; #else typedef std::ostringstream wrapped_stream; #endif // BOOST_NO_STRINGSTREAM public: // access methods wrap_stringstream& ref(); wrapped_stream& stream(); std::string const& str(); private: // Data members wrapped_stream m_stream; std::string m_str; }; //____________________________________________________________________________// template <class T> inline wrap_stringstream& operator<<( wrap_stringstream& targ, T const& t ) { targ.stream() << t; return targ; } //____________________________________________________________________________// inline wrap_stringstream::wrapped_stream& wrap_stringstream::stream() { return m_stream; } //____________________________________________________________________________// inline wrap_stringstream& wrap_stringstream::ref() { return *this; } //____________________________________________________________________________// inline std::string const& wrap_stringstream::str() { #ifdef BOOST_NO_STRINGSTREAM m_str.assign( m_stream.str(), m_stream.pcount() ); m_stream.freeze( false ); #else m_str = m_stream.str(); #endif return m_str; } //____________________________________________________________________________// inline wrap_stringstream& operator<<( wrap_stringstream& targ, wrap_stringstream& src ) { targ << src.str(); return targ; } #ifndef BOOST_NO_STD_LOCALE //____________________________________________________________________________// inline wrap_stringstream& operator<<( wrap_stringstream& targ, std::ios_base& (*man)(std::ios_base&) ) { targ.stream() << man; return targ; } //____________________________________________________________________________// template<typename Elem,typename Tr> inline wrap_stringstream& operator<<( wrap_stringstream& targ, std::basic_ostream<Elem,Tr>& (*man)(std::basic_ostream<Elem, Tr>&) ) { targ.stream() << man; return targ; } //____________________________________________________________________________// template<typename Elem,typename Tr> inline wrap_stringstream& operator<<( wrap_stringstream& targ, std::basic_ios<Elem, Tr>& (*man)(std::basic_ios<Elem, Tr>&) ) { targ.stream() << man; return targ; } #endif //____________________________________________________________________________// } // namespace boost #ifdef BOOST_MSVC # pragma warning(default: 4511) // copy constructor could not be generated # pragma warning(default: 4512) // assignment operator could not be generated # pragma warning(pop) #endif // *************************************************************************** // Revision History : // // $Log: wrap_stringstream.hpp,v $ // Revision 1.9 2003/12/01 00:41:56 rogeeff // prerelease cleaning // // *************************************************************************** #endif // BOOST_WRAP_STRINGSTREAM_HPP