124 lines
3.2 KiB
C
124 lines
3.2 KiB
C
/*=========================================================================
|
|
|
|
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) && !defined(KWSYS_FAKE_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
|