From f51648801f8ac191731fedcdbc1df3924a7b7e10 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Tue, 7 Feb 2006 10:11:40 -0500
Subject: [PATCH] ENH: Added kwsys::String class to shorten debugging symbols
 and error messages involving std::string.

---
 CMakeLists.txt |  2 +-
 String.hxx.in  | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+), 1 deletion(-)
 create mode 100644 String.hxx.in

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 722c1ba..c0f9dd8 100644
--- a/CMakeLists.txt
+++ b/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)
diff --git a/String.hxx.in b/String.hxx.in
new file mode 100644
index 0000000..6f449bb
--- /dev/null
+++ b/String.hxx.in
@@ -0,0 +1,59 @@
+/*=========================================================================
+
+  Program:   KWSys - Kitware System Library
+  Module:    String.hxx.in
+
+  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
-- 
GitLab