/*========================================================================= Program: KWSys - Kitware System Library Module: $RCSfile$ Copyright (c) Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices 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 # ifdef _MSC_VER # pragma warning(pop) # endif #else # ifdef _MSC_VER # pragma warning (push, 1) # pragma warning (disable: 4702) # endif # if @KWSYS_NAMESPACE@_IOS_USE_ANSI # include # elif @KWSYS_NAMESPACE@_IOS_USE_STRSTREAM_H # include # elif @KWSYS_NAMESPACE@_IOS_USE_STRSTREA_H # include # 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::ostream; using @KWSYS_NAMESPACE@_ios_namespace::istream; 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 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; }; class ostringstream: public ostrstream { public: typedef ostrstream Superclass; ostringstream() {} kwsys_stl::string str() { ostringstream_cleanup cleanup(*this); ostringstream_cleanup::IgnoreUnusedVariable(cleanup); int pcount = this->pcount(); const char* ptr = this->Superclass::str(); return kwsys_stl::string(ptr?ptr:"", pcount); } private: ostringstream(const ostringstream&); void operator=(const ostringstream&); }; class istringstream: private kwsys_stl::string, public istrstream { public: typedef kwsys_stl::string StdString; typedef istrstream IStrStream; istringstream(): StdString(), IStrStream(const_cast(StdString::c_str())) {} istringstream(const kwsys_stl::string& s): StdString(s), IStrStream(const_cast(StdString::c_str())) {} kwsys_stl::string str() const { return *this; } void str(const kwsys_stl::string& s) { this->~istringstream(); new (this) istringstream(s); } private: istringstream(const istringstream&); void operator=(const istringstream&); }; } // namespace @KWSYS_NAMESPACE@_ios #endif /* Undefine temporary macro. */ #if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE@_NAME_IS_KWSYS # undef kwsys_stl #endif #endif