| /*============================================================================ |
| KWSys - Kitware System Library |
| Copyright 2000-2009 Kitware, Inc., Insight Software Consortium |
| |
| Distributed under the OSI-approved BSD License (the "License"); |
| see accompanying file Copyright.txt for details. |
| |
| This software is distributed WITHOUT ANY WARRANTY; without even the |
| implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| See the License for more information. |
| ============================================================================*/ |
| #ifndef @KWSYS_NAMESPACE@_ios_sstream |
| #define @KWSYS_NAMESPACE@_ios_sstream |
| |
| #include <@KWSYS_NAMESPACE@/Configure.hxx> |
| |
| /* Define this macro temporarily to keep the code readable. */ |
| #if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE@_NAME_IS_KWSYS |
| # define kwsys_stl @KWSYS_NAMESPACE@_stl |
| #endif |
| |
| #if @KWSYS_NAMESPACE@_IOS_USE_SSTREAM |
| # ifdef _MSC_VER |
| # pragma warning (push, 1) |
| # pragma warning (disable: 4702) |
| # endif |
| # include <sstream> |
| # ifdef _MSC_VER |
| # pragma warning(pop) |
| # endif |
| #else |
| # ifdef _MSC_VER |
| # pragma warning (push, 1) |
| # pragma warning (disable: 4702) |
| # pragma warning (disable: 4995) /* Old streams are deprecated. */ |
| # endif |
| # if @KWSYS_NAMESPACE@_IOS_USE_ANSI |
| # include <strstream> |
| # elif @KWSYS_NAMESPACE@_IOS_USE_STRSTREAM_H |
| # include <strstream.h> |
| # elif @KWSYS_NAMESPACE@_IOS_USE_STRSTREA_H |
| # include <strstrea.h> |
| # endif |
| # if @KWSYS_NAMESPACE@_IOS_USE_ANSI |
| # include <new> // Need placement operator new. |
| # else |
| # include <new.h> // Need placement operator new. |
| # endif |
| # ifdef _MSC_VER |
| # pragma warning(pop) |
| # endif |
| |
| // Only have old std strstream classes. Wrap them to look like new |
| // ostringstream and istringstream classes. |
| |
| # include <@KWSYS_NAMESPACE@/stl/string> |
| |
| namespace @KWSYS_NAMESPACE@_ios |
| { |
| using @KWSYS_NAMESPACE@_ios_namespace::streambuf; |
| using @KWSYS_NAMESPACE@_ios_namespace::ostream; |
| using @KWSYS_NAMESPACE@_ios_namespace::istream; |
| using @KWSYS_NAMESPACE@_ios_namespace::strstream; |
| using @KWSYS_NAMESPACE@_ios_namespace::istrstream; |
| using @KWSYS_NAMESPACE@_ios_namespace::ostrstream; |
| using @KWSYS_NAMESPACE@_ios_namespace::ios; |
| using @KWSYS_NAMESPACE@_ios_namespace::endl; |
| using @KWSYS_NAMESPACE@_ios_namespace::ends; |
| using @KWSYS_NAMESPACE@_ios_namespace::flush; |
| |
| class stringstream_cleanup |
| { |
| public: |
| stringstream_cleanup(strstream& str): m_StrStream(str) {} |
| ~stringstream_cleanup() { m_StrStream.rdbuf()->freeze(0); } |
| static void IgnoreUnusedVariable(const stringstream_cleanup&) {} |
| protected: |
| strstream& m_StrStream; |
| private: |
| void operator=(stringstream_cleanup const&); |
| }; |
| |
| class stringstream: public strstream |
| { |
| public: |
| typedef strstream Superclass; |
| stringstream() {} |
| stringstream(const kwsys_stl::string& s) { *this << s.c_str(); } |
| kwsys_stl::string str() |
| { |
| stringstream_cleanup cleanup(*this); |
| stringstream_cleanup::IgnoreUnusedVariable(cleanup); |
| // Visual Studio 6 has a strstream::pcount, but this is not rdbuf()->pcount() |
| #if (@KWSYS_NAMESPACE@_IOS_USE_STRSTREA_H) && defined(_MSC_VER) && (_MSC_VER == 1200) |
| int count = this->pcount(); |
| #elif defined(__WATCOMC__) |
| int count = this->rdbuf()->out_waiting(); |
| #else |
| int count = this->rdbuf()->pcount(); |
| #endif |
| const char* ptr = this->Superclass::str(); |
| return kwsys_stl::string(ptr?ptr:"", count); |
| } |
| void str(const kwsys_stl::string& s) |
| { |
| this->~stringstream(); |
| new (this) stringstream(s); |
| } |
| private: |
| stringstream(const stringstream&); |
| void operator=(const stringstream&); |
| }; |
| |
| class ostringstream_cleanup |
| { |
| public: |
| ostringstream_cleanup(ostrstream& ostr): m_OStrStream(ostr) {} |
| ~ostringstream_cleanup() { m_OStrStream.rdbuf()->freeze(0); } |
| static void IgnoreUnusedVariable(const ostringstream_cleanup&) {} |
| protected: |
| ostrstream& m_OStrStream; |
| private: |
| void operator=(ostringstream_cleanup const&); |
| }; |
| |
| class ostringstream: public ostrstream |
| { |
| public: |
| typedef ostrstream Superclass; |
| ostringstream() {} |
| ostringstream(const kwsys_stl::string& s) { *this << s.c_str(); } |
| kwsys_stl::string str() |
| { |
| ostringstream_cleanup cleanup(*this); |
| ostringstream_cleanup::IgnoreUnusedVariable(cleanup); |
| int count = this->pcount(); |
| const char* ptr = this->Superclass::str(); |
| return kwsys_stl::string(ptr?ptr:"", count); |
| } |
| void str(const kwsys_stl::string& s) |
| { |
| this->~ostringstream(); |
| new (this) ostringstream(s); |
| } |
| private: |
| ostringstream(const ostringstream&); |
| void operator=(const ostringstream&); |
| }; |
| |
| #if defined(_MSC_VER) |
| # pragma warning (push) |
| # pragma warning (disable: 4097) /* typedef-name used as synonym for class */ |
| #endif |
| #if defined(__WATCOMC__) |
| // W728: class modifiers for 'A' conflict with class modifiers for 'B' |
| # pragma warning 728 10 |
| #endif |
| |
| class istringstream: private kwsys_stl::string, public istrstream |
| { |
| public: |
| typedef kwsys_stl::string StdString; |
| typedef istrstream IStrStream; |
| istringstream(): StdString(), |
| IStrStream(const_cast<char*>(StdString::c_str())) {} |
| istringstream(const kwsys_stl::string& s): |
| StdString(s), IStrStream(const_cast<char*>(StdString::c_str())) {} |
| kwsys_stl::string str() const { return *this; } |
| void str(const kwsys_stl::string& s) |
| { |
| this->~istringstream(); |
| new (this) istringstream(s); |
| } |
| void clear(int flags) |
| { |
| this->IStrStream::clear(flags); |
| } |
| private: |
| istringstream(const istringstream&); |
| void operator=(const istringstream&); |
| }; |
| |
| #if defined(__WATCOMC__) |
| # pragma warning 728 9 |
| #endif |
| #if defined(_MSC_VER) |
| # pragma warning (pop) |
| #endif |
| |
| } // namespace @KWSYS_NAMESPACE@_ios |
| |
| #endif |
| |
| /* Undefine temporary macro. */ |
| #if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE@_NAME_IS_KWSYS |
| # undef kwsys_stl |
| #endif |
| |
| #endif |