| // (C) Copyright Gennadiy Rozental 2002-2008. |
| // Distributed under 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$ |
| // |
| // Version : $Revision: 49312 $ |
| // |
| // Description : wraps strstream and stringstream (depends with one is present) |
| // to provide the unified interface |
| // *************************************************************************** |
| |
| #ifndef NDNBOOST_WRAP_STRINGSTREAM_HPP_071894GER |
| #define NDNBOOST_WRAP_STRINGSTREAM_HPP_071894GER |
| |
| // Boost.Test |
| #include <ndnboost/test/detail/config.hpp> |
| |
| // STL |
| #ifdef NDNBOOST_NO_STRINGSTREAM |
| #include <strstream> // for std::ostrstream |
| #else |
| #include <sstream> // for std::ostringstream |
| #endif // NDNBOOST_NO_STRINGSTREAM |
| |
| #include <ndnboost/test/detail/suppress_warnings.hpp> |
| |
| //____________________________________________________________________________// |
| |
| namespace ndnboost { |
| |
| // ************************************************************************** // |
| // ************** basic_wrap_stringstream ************** // |
| // ************************************************************************** // |
| |
| template<typename CharT> |
| class basic_wrap_stringstream { |
| public: |
| #if defined(NDNBOOST_CLASSIC_IOSTREAMS) |
| typedef std::ostringstream wrapped_stream; |
| #elif defined(NDNBOOST_NO_STRINGSTREAM) |
| typedef std::basic_ostrstream<CharT> wrapped_stream; |
| #else |
| typedef std::basic_ostringstream<CharT> wrapped_stream; |
| #endif // NDNBOOST_NO_STRINGSTREAM |
| // Access methods |
| basic_wrap_stringstream& ref(); |
| wrapped_stream& stream(); |
| std::basic_string<CharT> const& str(); |
| |
| private: |
| // Data members |
| wrapped_stream m_stream; |
| std::basic_string<CharT> m_str; |
| }; |
| |
| //____________________________________________________________________________// |
| |
| template <typename CharT, typename T> |
| inline basic_wrap_stringstream<CharT>& |
| operator<<( basic_wrap_stringstream<CharT>& targ, T const& t ) |
| { |
| targ.stream() << t; |
| return targ; |
| } |
| |
| //____________________________________________________________________________// |
| |
| template <typename CharT> |
| inline typename basic_wrap_stringstream<CharT>::wrapped_stream& |
| basic_wrap_stringstream<CharT>::stream() |
| { |
| return m_stream; |
| } |
| |
| //____________________________________________________________________________// |
| |
| template <typename CharT> |
| inline basic_wrap_stringstream<CharT>& |
| basic_wrap_stringstream<CharT>::ref() |
| { |
| return *this; |
| } |
| |
| //____________________________________________________________________________// |
| |
| template <typename CharT> |
| inline std::basic_string<CharT> const& |
| basic_wrap_stringstream<CharT>::str() |
| { |
| |
| #ifdef NDNBOOST_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; |
| } |
| |
| //____________________________________________________________________________// |
| |
| template <typename CharT> |
| inline basic_wrap_stringstream<CharT>& |
| operator<<( basic_wrap_stringstream<CharT>& targ, basic_wrap_stringstream<CharT>& src ) |
| { |
| targ << src.str(); |
| return targ; |
| } |
| |
| //____________________________________________________________________________// |
| |
| #if NDNBOOST_TEST_USE_STD_LOCALE |
| |
| template <typename CharT> |
| inline basic_wrap_stringstream<CharT>& |
| operator<<( basic_wrap_stringstream<CharT>& targ, std::ios_base& (NDNBOOST_TEST_CALL_DECL *man)(std::ios_base&) ) |
| { |
| targ.stream() << man; |
| return targ; |
| } |
| |
| //____________________________________________________________________________// |
| |
| template<typename CharT,typename Elem,typename Tr> |
| inline basic_wrap_stringstream<CharT>& |
| operator<<( basic_wrap_stringstream<CharT>& targ, std::basic_ostream<Elem,Tr>& (NDNBOOST_TEST_CALL_DECL *man)(std::basic_ostream<Elem, Tr>&) ) |
| { |
| targ.stream() << man; |
| return targ; |
| } |
| |
| //____________________________________________________________________________// |
| |
| template<typename CharT,typename Elem,typename Tr> |
| inline basic_wrap_stringstream<CharT>& |
| operator<<( basic_wrap_stringstream<CharT>& targ, std::basic_ios<Elem, Tr>& (NDNBOOST_TEST_CALL_DECL *man)(std::basic_ios<Elem, Tr>&) ) |
| { |
| targ.stream() << man; |
| return targ; |
| } |
| |
| //____________________________________________________________________________// |
| |
| #endif |
| |
| // ************************************************************************** // |
| // ************** wrap_stringstream ************** // |
| // ************************************************************************** // |
| |
| typedef basic_wrap_stringstream<char> wrap_stringstream; |
| typedef basic_wrap_stringstream<wchar_t> wrap_wstringstream; |
| |
| } // namespace ndnboost |
| |
| //____________________________________________________________________________// |
| |
| #include <ndnboost/test/detail/enable_warnings.hpp> |
| |
| #endif // NDNBOOST_WRAP_STRINGSTREAM_HPP_071894GER |