ENH: Added wrappers around the std stream headers to make them look like ansi streams on all platforms.
This commit is contained in:
parent
395fae7642
commit
b910480e32
@ -69,6 +69,16 @@ FOREACH(header algorithm deque iterator list map numeric queue set stack string
|
||||
ENDIF(KWSYS_INCLUDE_INSTALL_DIR)
|
||||
ENDFOREACH(header)
|
||||
|
||||
FOREACH(header iostream fstream sstream iosfwd)
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/kwsys_std_${header}.h.in
|
||||
${PROJECT_BINARY_DIR}/../${KWSYS_NAMESPACE}/std/${header}
|
||||
@ONLY IMMEDIATE)
|
||||
IF(KWSYS_INCLUDE_INSTALL_DIR)
|
||||
INSTALL_FILES(${KWSYS_INCLUDE_INSTALL_DIR}/${KWSYS_NAMESPACE}
|
||||
FILES ${PROJECT_BINARY_DIR}/../${KWSYS_NAMESPACE}/std/${header})
|
||||
ENDIF(KWSYS_INCLUDE_INSTALL_DIR)
|
||||
ENDFOREACH(header)
|
||||
|
||||
IF(KWSYS_DEFAULTS)
|
||||
INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/..)
|
||||
ADD_EXECUTABLE(test1 test1.cxx)
|
||||
|
@ -1,3 +1,19 @@
|
||||
/*=========================================================================
|
||||
|
||||
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@_Configure_hxx
|
||||
#define @KWSYS_NAMESPACE@_Configure_hxx
|
||||
|
||||
|
@ -21,8 +21,8 @@
|
||||
#include <SystemTools.hxx>
|
||||
#include <RegularExpression.hxx>
|
||||
#include <Directory.hxx>
|
||||
|
||||
#include <fstream>
|
||||
#include <std/iostream>
|
||||
#include <std/fstream>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
|
@ -17,10 +17,9 @@
|
||||
#ifndef @KWSYS_NAMESPACE@_SystemTools_hxx
|
||||
#define @KWSYS_NAMESPACE@_SystemTools_hxx
|
||||
|
||||
#include <@KWSYS_NAMESPACE@/StandardIncludes.hxx>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <@KWSYS_NAMESPACE@/std/iosfwd>
|
||||
#include <@KWSYS_NAMESPACE@/std/string>
|
||||
#include <@KWSYS_NAMESPACE@/std/vector>
|
||||
|
||||
namespace @KWSYS_NAMESPACE@
|
||||
{
|
||||
|
@ -1,3 +1,19 @@
|
||||
/*=========================================================================
|
||||
|
||||
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_@KWSYS_STL_HEADER@
|
||||
#define @KWSYS_NAMESPACE@_std_@KWSYS_STL_HEADER@
|
||||
|
||||
|
51
Source/kwsys/kwsys_std_fstream.h.in
Normal file
51
Source/kwsys/kwsys_std_fstream.h.in
Normal file
@ -0,0 +1,51 @@
|
||||
/*=========================================================================
|
||||
|
||||
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_fstream
|
||||
#define @KWSYS_NAMESPACE@_std_fstream
|
||||
|
||||
#include <@KWSYS_NAMESPACE@/Configure.hxx>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (push, 1)
|
||||
#pragma warning (disable: 4702)
|
||||
#endif
|
||||
|
||||
#if !defined(KWSYS_NO_ANSI_STREAM_HEADERS)
|
||||
# include <fstream>
|
||||
#else
|
||||
# include <fstream.h>
|
||||
# if !defined(KWSYS_NO_STD_NAMESPACE)
|
||||
|
||||
namespace std
|
||||
{
|
||||
using ::ostream;
|
||||
using ::istream;
|
||||
using ::ofstream;
|
||||
using ::ifstream;
|
||||
using ::ios;
|
||||
using ::endl;
|
||||
using ::flush;
|
||||
}
|
||||
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
#endif
|
49
Source/kwsys/kwsys_std_iosfwd.h.in
Normal file
49
Source/kwsys/kwsys_std_iosfwd.h.in
Normal file
@ -0,0 +1,49 @@
|
||||
/*=========================================================================
|
||||
|
||||
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_iosfwd
|
||||
#define @KWSYS_NAMESPACE@_std_iosfwd
|
||||
|
||||
#include <@KWSYS_NAMESPACE@/Configure.hxx>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (push, 1)
|
||||
#pragma warning (disable: 4702)
|
||||
#endif
|
||||
|
||||
#if !defined(KWSYS_NO_ANSI_STREAM_HEADERS)
|
||||
# include <iosfwd>
|
||||
#else
|
||||
# if !defined(KWSYS_NO_STD_NAMESPACE)
|
||||
namespace std
|
||||
{
|
||||
# endif
|
||||
class fstream;
|
||||
class ifstream;
|
||||
class ios;
|
||||
class istream;
|
||||
class ofstream;
|
||||
class ostream;
|
||||
# if !defined(KWSYS_NO_STD_NAMESPACE)
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
#endif
|
52
Source/kwsys/kwsys_std_iostream.h.in
Normal file
52
Source/kwsys/kwsys_std_iostream.h.in
Normal file
@ -0,0 +1,52 @@
|
||||
/*=========================================================================
|
||||
|
||||
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_iostream
|
||||
#define @KWSYS_NAMESPACE@_std_iostream
|
||||
|
||||
#include <@KWSYS_NAMESPACE@/Configure.hxx>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (push, 1)
|
||||
#pragma warning (disable: 4702)
|
||||
#endif
|
||||
|
||||
#if !defined(KWSYS_NO_ANSI_STREAM_HEADERS)
|
||||
# include <iostream>
|
||||
#else
|
||||
# include <iostream.h>
|
||||
# if !defined(KWSYS_NO_STD_NAMESPACE)
|
||||
|
||||
namespace std
|
||||
{
|
||||
using ::ostream;
|
||||
using ::istream;
|
||||
using ::ios;
|
||||
using ::cout;
|
||||
using ::cerr;
|
||||
using ::cin;
|
||||
using ::endl;
|
||||
using ::flush;
|
||||
}
|
||||
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
#endif
|
125
Source/kwsys/kwsys_std_sstream.h.in
Normal file
125
Source/kwsys/kwsys_std_sstream.h.in
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user