Browse Source

ENH: Added kwsys::String class to shorten debugging symbols and error messages involving std::string.

Brad King 20 years ago
parent
commit
f71a085f74
4 changed files with 63 additions and 21 deletions
  1. 2 20
      Source/cmStandardIncludes.h
  2. 1 1
      Source/kwsys/CMakeLists.txt
  3. 59 0
      Source/kwsys/String.hxx.in
  4. 1 0
      bootstrap

+ 2 - 20
Source/cmStandardIncludes.h

@@ -212,26 +212,8 @@ inline bool operator==(std::string const& a, const char* b)
 // use this class to shrink the size of symbols in .o files
 // std::string is really basic_string<....lots of stuff....>
 // when combined with a map or set, the symbols can be > 2000 chars!
-struct cmStdString : public std::string
-{
-  typedef std::string StdString;
-  typedef StdString::value_type             value_type;
-  typedef StdString::pointer                pointer;
-  typedef StdString::reference              reference;
-  typedef StdString::const_reference        const_reference;
-  typedef StdString::size_type              size_type;
-  typedef StdString::difference_type        difference_type;
-  typedef StdString::iterator               iterator;
-  typedef StdString::const_iterator         const_iterator;
-  typedef StdString::reverse_iterator       reverse_iterator;
-  typedef StdString::const_reverse_iterator const_reverse_iterator;
-  
-  cmStdString(): StdString() {}
-  cmStdString(const value_type* s): StdString(s) {}
-  cmStdString(const value_type* s, size_type n): StdString(s, n) {}
-  cmStdString(const StdString& s, size_type pos=0, size_type n=npos):
-    StdString(s, pos, n) {}
-};
+#include <cmsys/String.hxx>
+typedef cmsys::String cmStdString;
 
 // Define cmOStringStream and cmIStringStream wrappers to hide
 // differences between std::stringstream and the old strstream.

+ 1 - 1
Source/kwsys/CMakeLists.txt

@@ -411,7 +411,7 @@ ENDFOREACH(header)
 # selected components.  Initialize with required components.
 SET(KWSYS_CLASSES)
 SET(KWSYS_H_FILES Configure SharedForward)
-SET(KWSYS_HXX_FILES Configure hashtable hash_fun hash_map hash_set)
+SET(KWSYS_HXX_FILES Configure String hashtable hash_fun hash_map hash_set)
 
 # Enforce component dependencies.
 IF(KWSYS_USE_SystemTools)

+ 59 - 0
Source/kwsys/String.hxx.in

@@ -0,0 +1,59 @@
+/*=========================================================================
+
+  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.
+
+=========================================================================*/
+#ifndef @KWSYS_NAMESPACE@_String_hxx
+#define @KWSYS_NAMESPACE@_String_hxx
+
+#include <@KWSYS_NAMESPACE@/stl/string>
+
+namespace @KWSYS_NAMESPACE@
+{
+
+/** \class String
+ * \brief Short-name version of the STL basic_string class template.
+ *
+ * The standard library "std::string" type is actually a typedef for
+ * "std::basic_string<..long argument list..>".  This string class is
+ * simply a subclass of this type with the same interface so that the
+ * name is shorter in debugging symbols and error messages.
+ */
+class @KWSYS_NAMESPACE@_EXPORT String: public @KWSYS_NAMESPACE@_stl::string
+{
+  /** The original string type.  */
+  typedef @KWSYS_NAMESPACE@_stl::string stl_string;
+
+public:
+
+  /** String member types.  */
+  typedef stl_string::value_type             value_type;
+  typedef stl_string::pointer                pointer;
+  typedef stl_string::reference              reference;
+  typedef stl_string::const_reference        const_reference;
+  typedef stl_string::size_type              size_type;
+  typedef stl_string::difference_type        difference_type;
+  typedef stl_string::iterator               iterator;
+  typedef stl_string::const_iterator         const_iterator;
+  typedef stl_string::reverse_iterator       reverse_iterator;
+  typedef stl_string::const_reverse_iterator const_reverse_iterator;
+
+  /** String constructors.  */
+  String(): stl_string() {}
+  String(const value_type* s): stl_string(s) {}
+  String(const value_type* s, size_type n): stl_string(s, n) {}
+  String(const stl_string& s, size_type pos=0, size_type n=npos):
+    stl_string(s, pos, n) {}
+}; // End Class: String
+
+} // namespace @KWSYS_NAMESPACE@
+
+#endif

+ 1 - 0
bootstrap

@@ -130,6 +130,7 @@ KWSYS_FILES="\
   Glob.hxx \
   Process.h \
   RegularExpression.hxx \
+  String.hxx \
   SystemTools.hxx"
 
 KWSYS_IOS_FILES="