|
@@ -0,0 +1,125 @@
|
|
|
|
|
+/*=========================================================================
|
|
|
|
|
+
|
|
|
|
|
+ Program: KWSys - Kitware System Library
|
|
|
|
|
+ Module: $RCSfile$
|
|
|
|
|
+ Language: C++
|
|
|
|
|
+ Date: $Date$
|
|
|
|
|
+ Version: $Revision$
|
|
|
|
|
+
|
|
|
|
|
+ Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
|
|
|
|
+ See http://www.cmake.org/HTML/Copyright.html 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@_std_sstream
|
|
|
|
|
+#define @KWSYS_NAMESPACE@_std_sstream
|
|
|
|
|
+
|
|
|
|
|
+#include <@KWSYS_NAMESPACE@/Configure.hxx>
|
|
|
|
|
+
|
|
|
|
|
+#if !defined(KWSYS_NO_ANSI_STRING_STREAM)
|
|
|
|
|
+# 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)
|
|
|
|
|
+# endif
|
|
|
|
|
+# if !defined(KWSYS_NO_ANSI_STREAM_HEADERS)
|
|
|
|
|
+# include <strstream>
|
|
|
|
|
+# else
|
|
|
|
|
+# include <strstream.h>
|
|
|
|
|
+# if !defined(KWSYS_NO_STD_NAMESPACE)
|
|
|
|
|
+
|
|
|
|
|
+namespace std
|
|
|
|
|
+{
|
|
|
|
|
+ using ::ostream;
|
|
|
|
|
+ using ::istream;
|
|
|
|
|
+ using ::istrstream;
|
|
|
|
|
+ using ::ostrstream;
|
|
|
|
|
+ using ::ios;
|
|
|
|
|
+ using ::endl;
|
|
|
|
|
+ using ::ends;
|
|
|
|
|
+ using ::flush;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# endif
|
|
|
|
|
+# 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@/std/string>
|
|
|
|
|
+
|
|
|
|
|
+# if !defined(KWSYS_NO_STD_NAMESPACE)
|
|
|
|
|
+namespace std
|
|
|
|
|
+{
|
|
|
|
|
+# endif
|
|
|
|
|
+
|
|
|
|
|
+class ostringstream_cleanup
|
|
|
|
|
+{
|
|
|
|
|
+public:
|
|
|
|
|
+ ostringstream_cleanup(kwsys_std::ostrstream& ostr): m_OStrStream(ostr) {}
|
|
|
|
|
+ ~ostringstream_cleanup() { m_OStrStream.rdbuf()->freeze(0); }
|
|
|
|
|
+ static void IgnoreUnusedVariable(const ostringstream_cleanup&) {}
|
|
|
|
|
+protected:
|
|
|
|
|
+ kwsys_std::ostrstream& m_OStrStream;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+class ostringstream: public kwsys_std::ostrstream
|
|
|
|
|
+{
|
|
|
|
|
+public:
|
|
|
|
|
+ typedef kwsys_std::ostrstream Superclass;
|
|
|
|
|
+ ostringstream() {}
|
|
|
|
|
+ kwsys_std::string str()
|
|
|
|
|
+ {
|
|
|
|
|
+ ostringstream_cleanup cleanup(*this);
|
|
|
|
|
+ ostringstream_cleanup::IgnoreUnusedVariable(cleanup);
|
|
|
|
|
+ int pcount = this->pcount();
|
|
|
|
|
+ const char* ptr = this->Superclass::str();
|
|
|
|
|
+ return kwsys_std::string(ptr?ptr:"", pcount);
|
|
|
|
|
+ }
|
|
|
|
|
+private:
|
|
|
|
|
+ ostringstream(const ostringstream&);
|
|
|
|
|
+ void operator=(const ostringstream&);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+class istringstream: private kwsys_std::string, public kwsys_std::istrstream
|
|
|
|
|
+{
|
|
|
|
|
+public:
|
|
|
|
|
+ typedef kwsys_std::string StdString;
|
|
|
|
|
+ typedef kwsys_std::istrstream IStrStream;
|
|
|
|
|
+ istringstream(): StdString(), IStrStream(StdString::c_str()) {}
|
|
|
|
|
+ istringstream(const kwsys_std::string& s):
|
|
|
|
|
+ StdString(s), IStrStream(StdString::c_str()) {}
|
|
|
|
|
+ kwsys_std::string str() const { return *this; }
|
|
|
|
|
+ void str(const kwsys_std::string& s)
|
|
|
|
|
+ {
|
|
|
|
|
+ // Very dangerous. If this throws, the object is hosed. When the
|
|
|
|
|
+ // destructor is later called, the program is hosed too.
|
|
|
|
|
+ this->~istringstream();
|
|
|
|
|
+ new (this) istringstream(s);
|
|
|
|
|
+ }
|
|
|
|
|
+private:
|
|
|
|
|
+ istringstream(const istringstream&);
|
|
|
|
|
+ void operator=(const istringstream&);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+# if !defined(KWSYS_NO_STD_NAMESPACE)
|
|
|
|
|
+}
|
|
|
|
|
+# endif
|
|
|
|
|
+
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#endif
|