|
|
@@ -0,0 +1,92 @@
|
|
|
+/*=========================================================================
|
|
|
+
|
|
|
+ Program: KWSys - Kitware System Library
|
|
|
+ Module: $RCSfile$
|
|
|
+
|
|
|
+ Copyright (c) Kitware, Inc., Insight Consortium. All rights reserved.
|
|
|
+ See Copyright.txt or http://www.kitware.com/Copyright.htm 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.
|
|
|
+
|
|
|
+=========================================================================*/
|
|
|
+
|
|
|
+// 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.
|
|
|
+#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
|
|
|
+# include <ctype.h> // isspace
|
|
|
+# include <@KWSYS_NAMESPACE@/ios/iostream>
|
|
|
+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.
|
|
|
+ is.eatwhite();
|
|
|
+ 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.
|
|
|
+#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
|
|
|
+# 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
|