| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /*============================================================================
- 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
|