mirror of
https://github.com/reactos/CMake.git
synced 2024-12-12 05:45:51 +00:00
de955e4b6d
This converts the KWSys license to a pure 3-clause OSI-approved BSD License. We drop the previous license clause requiring modified versions to be plainly marked. We also update the KWSys copyright to cover the full development time range.
124 lines
4.5 KiB
C++
124 lines
4.5 KiB
C++
/*============================================================================
|
|
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.
|
|
============================================================================*/
|
|
|
|
// This header is extra code for <@KWSYS_NAMESPACE@/stl/string>.
|
|
#if !defined(@KWSYS_NAMESPACE@_stl_string_including_hxx)
|
|
# error "The header <@KWSYS_NAMESPACE@/stl/string.hxx> may be included only by <@KWSYS_NAMESPACE@/stl/string>."
|
|
#endif
|
|
|
|
// Provide the istream operator for the stl string if it is not
|
|
// provided by the system or another copy of kwsys. Allow user code
|
|
// to block this definition by defining the macro
|
|
// @KWSYS_NAMESPACE@_STL_STRING_NO_ISTREAM
|
|
// to avoid conflicts with other libraries. User code can test for
|
|
// this definition by checking the macro
|
|
// @KWSYS_NAMESPACE@_STL_STRING_ISTREAM_DEFINED
|
|
#if !@KWSYS_NAMESPACE@_STL_STRING_HAVE_ISTREAM && !defined(@KWSYS_NAMESPACE@_STL_STRING_NO_ISTREAM) && !defined(KWSYS_STL_STRING_ISTREAM_DEFINED)
|
|
# define KWSYS_STL_STRING_ISTREAM_DEFINED
|
|
# define @KWSYS_NAMESPACE@_STL_STRING_ISTREAM_DEFINED
|
|
# include <ctype.h> // isspace
|
|
# include <@KWSYS_NAMESPACE@/ios/iostream>
|
|
# if defined(__WATCOMC__)
|
|
namespace @KWSYS_NAMESPACE@
|
|
{
|
|
struct ios_istream_hack: public kwsys_ios::istream
|
|
{ void eatwhite() { this->@KWSYS_NAMESPACE@_ios::istream::eatwhite(); } };
|
|
}
|
|
# endif
|
|
inline @KWSYS_NAMESPACE@_ios::istream&
|
|
operator>>(@KWSYS_NAMESPACE@_ios::istream& is,
|
|
@KWSYS_NAMESPACE@_stl::string& s)
|
|
{
|
|
// Keep track of the resulting state.
|
|
int state = @KWSYS_NAMESPACE@_ios::ios::goodbit;
|
|
|
|
// Save the width setting and set it back to zero.
|
|
size_t n = static_cast<size_t>(is.width(0));
|
|
|
|
// Clear any old contents of the output string.
|
|
s.erase();
|
|
|
|
// Skip leading whitespace.
|
|
#if defined(__WATCOMC__)
|
|
static_cast<@KWSYS_NAMESPACE@::ios_istream_hack&>(is).eatwhite();
|
|
#else
|
|
is.eatwhite();
|
|
#endif
|
|
@KWSYS_NAMESPACE@_ios::istream& okay = is;
|
|
|
|
if(okay)
|
|
{
|
|
// Select a maximum possible length.
|
|
if(n == 0 || n >= s.max_size())
|
|
{
|
|
n = s.max_size();
|
|
}
|
|
|
|
// Read until a space is found or the maximum length is reached.
|
|
bool success = false;
|
|
for(int c = is.peek(); (--n > 0 && c != EOF && !isspace(c)); c = is.peek())
|
|
{
|
|
s += static_cast<char>(c);
|
|
success = true;
|
|
is.ignore();
|
|
}
|
|
|
|
// Set flags for resulting state.
|
|
if(is.peek() == EOF) { state |= @KWSYS_NAMESPACE@_ios::ios::eofbit; }
|
|
if(!success) { state |= @KWSYS_NAMESPACE@_ios::ios::failbit; }
|
|
}
|
|
|
|
// Set the final result state.
|
|
is.clear(state);
|
|
return is;
|
|
}
|
|
#endif
|
|
|
|
// Provide the ostream operator for the stl string if it is not
|
|
// provided by the system or another copy of kwsys. Allow user code
|
|
// to block this definition by defining the macro
|
|
// @KWSYS_NAMESPACE@_STL_STRING_NO_OSTREAM
|
|
// to avoid conflicts with other libraries. User code can test for
|
|
// this definition by checking the macro
|
|
// @KWSYS_NAMESPACE@_STL_STRING_OSTREAM_DEFINED
|
|
#if !@KWSYS_NAMESPACE@_STL_STRING_HAVE_OSTREAM && !defined(@KWSYS_NAMESPACE@_STL_STRING_NO_OSTREAM) && !defined(KWSYS_STL_STRING_OSTREAM_DEFINED)
|
|
# define KWSYS_STL_STRING_OSTREAM_DEFINED
|
|
# define @KWSYS_NAMESPACE@_STL_STRING_OSTREAM_DEFINED
|
|
# include <@KWSYS_NAMESPACE@/ios/iostream>
|
|
inline @KWSYS_NAMESPACE@_ios::ostream&
|
|
operator<<(@KWSYS_NAMESPACE@_ios::ostream& os,
|
|
@KWSYS_NAMESPACE@_stl::string const& s)
|
|
{
|
|
return os << s.c_str();
|
|
}
|
|
#endif
|
|
|
|
// Provide the operator!= for the stl string and char* if it is not
|
|
// provided by the system or another copy of kwsys. Allow user code
|
|
// to block this definition by defining the macro
|
|
// @KWSYS_NAMESPACE@_STL_STRING_NO_NEQ_CHAR
|
|
// to avoid conflicts with other libraries. User code can test for
|
|
// this definition by checking the macro
|
|
// @KWSYS_NAMESPACE@_STL_STRING_NEQ_CHAR_DEFINED
|
|
#if !@KWSYS_NAMESPACE@_STL_STRING_HAVE_NEQ_CHAR && !defined(@KWSYS_NAMESPACE@_STL_STRING_NO_NEQ_CHAR) && !defined(KWSYS_STL_STRING_NEQ_CHAR_DEFINED)
|
|
# define KWSYS_STL_STRING_NEQ_CHAR_DEFINED
|
|
# define @KWSYS_NAMESPACE@_STL_STRING_NEQ_CHAR_DEFINED
|
|
inline bool operator!=(@KWSYS_NAMESPACE@_stl::string const& s, const char* c)
|
|
{
|
|
return !(s == c);
|
|
}
|
|
inline bool operator!=(const char* c, @KWSYS_NAMESPACE@_stl::string const& s)
|
|
{
|
|
return !(s == c);
|
|
}
|
|
#endif
|