Chris@16: // (C) Copyright Gennadiy Rozental 2002-2008. Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org/libs/test for the library home page. Chris@16: // Chris@16: // File : $RCSfile$ Chris@16: // Chris@101: // Version : $Revision$ Chris@16: // Chris@16: // Description : wraps strstream and stringstream (depends with one is present) Chris@16: // to provide the unified interface Chris@16: // *************************************************************************** Chris@16: Chris@16: #ifndef BOOST_WRAP_STRINGSTREAM_HPP_071894GER Chris@16: #define BOOST_WRAP_STRINGSTREAM_HPP_071894GER Chris@16: Chris@16: // Boost.Test Chris@16: #include Chris@16: Chris@16: // STL Chris@16: #ifdef BOOST_NO_STRINGSTREAM Chris@16: #include // for std::ostrstream Chris@16: #else Chris@16: #include // for std::ostringstream Chris@16: #endif // BOOST_NO_STRINGSTREAM Chris@16: Chris@16: #include Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** basic_wrap_stringstream ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: template Chris@16: class basic_wrap_stringstream { Chris@16: public: Chris@16: #if defined(BOOST_CLASSIC_IOSTREAMS) Chris@16: typedef std::ostringstream wrapped_stream; Chris@16: #elif defined(BOOST_NO_STRINGSTREAM) Chris@16: typedef std::basic_ostrstream wrapped_stream; Chris@16: #else Chris@16: typedef std::basic_ostringstream wrapped_stream; Chris@16: #endif // BOOST_NO_STRINGSTREAM Chris@16: // Access methods Chris@16: basic_wrap_stringstream& ref(); Chris@16: wrapped_stream& stream(); Chris@16: std::basic_string const& str(); Chris@16: Chris@16: private: Chris@16: // Data members Chris@16: wrapped_stream m_stream; Chris@16: std::basic_string m_str; Chris@16: }; Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: template Chris@16: inline basic_wrap_stringstream& Chris@16: operator<<( basic_wrap_stringstream& targ, T const& t ) Chris@16: { Chris@16: targ.stream() << t; Chris@16: return targ; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: template Chris@16: inline typename basic_wrap_stringstream::wrapped_stream& Chris@16: basic_wrap_stringstream::stream() Chris@16: { Chris@16: return m_stream; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: template Chris@16: inline basic_wrap_stringstream& Chris@16: basic_wrap_stringstream::ref() Chris@16: { Chris@16: return *this; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: template Chris@16: inline std::basic_string const& Chris@16: basic_wrap_stringstream::str() Chris@16: { Chris@16: Chris@16: #ifdef BOOST_NO_STRINGSTREAM Chris@16: m_str.assign( m_stream.str(), m_stream.pcount() ); Chris@16: m_stream.freeze( false ); Chris@16: #else Chris@16: m_str = m_stream.str(); Chris@16: #endif Chris@16: Chris@16: return m_str; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: template Chris@16: inline basic_wrap_stringstream& Chris@16: operator<<( basic_wrap_stringstream& targ, basic_wrap_stringstream& src ) Chris@16: { Chris@16: targ << src.str(); Chris@16: return targ; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: #if BOOST_TEST_USE_STD_LOCALE Chris@16: Chris@16: template Chris@16: inline basic_wrap_stringstream& Chris@16: operator<<( basic_wrap_stringstream& targ, std::ios_base& (BOOST_TEST_CALL_DECL *man)(std::ios_base&) ) Chris@16: { Chris@16: targ.stream() << man; Chris@16: return targ; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: template Chris@16: inline basic_wrap_stringstream& Chris@16: operator<<( basic_wrap_stringstream& targ, std::basic_ostream& (BOOST_TEST_CALL_DECL *man)(std::basic_ostream&) ) Chris@16: { Chris@16: targ.stream() << man; Chris@16: return targ; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: template Chris@16: inline basic_wrap_stringstream& Chris@16: operator<<( basic_wrap_stringstream& targ, std::basic_ios& (BOOST_TEST_CALL_DECL *man)(std::basic_ios&) ) Chris@16: { Chris@16: targ.stream() << man; Chris@16: return targ; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: #endif Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** wrap_stringstream ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: typedef basic_wrap_stringstream wrap_stringstream; Chris@16: typedef basic_wrap_stringstream wrap_wstringstream; Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // BOOST_WRAP_STRINGSTREAM_HPP_071894GER