Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/global/management/include/G4String.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /global/management/include/G4String.hh (Version 11.3.0) and /global/management/include/G4String.hh (Version 4.0.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                    <<   3 // * DISCLAIMER                                                       *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th <<   5 // * The following disclaimer summarizes all the specific disclaimers *
  6 // * the Geant4 Collaboration.  It is provided <<   6 // * of contributors to this software. The specific disclaimers,which *
  7 // * conditions of the Geant4 Software License <<   7 // * govern, are listed with their locations in:                      *
  8 // * LICENSE and available at  http://cern.ch/ <<   8 // *   http://cern.ch/geant4/license                                  *
  9 // * include a list of copyright holders.      << 
 10 // *                                                9 // *                                                                  *
 11 // * Neither the authors of this software syst     10 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     11 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     12 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     13 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  <<  14 // * use.                                                             *
 16 // * for the full disclaimer and the limitatio << 
 17 // *                                               15 // *                                                                  *
 18 // * This  code  implementation is the result  <<  16 // * This  code  implementation is the  intellectual property  of the *
 19 // * technical work of the GEANT4 collaboratio <<  17 // * GEANT4 collaboration.                                            *
 20 // * By using,  copying,  modifying or  distri <<  18 // * By copying,  distributing  or modifying the Program (or any work *
 21 // * any work based  on the software)  you  ag <<  19 // * based  on  the Program)  you indicate  your  acceptance of  this *
 22 // * use  in  resulting  scientific  publicati <<  20 // * statement, and all its terms.                                    *
 23 // * acceptance of all terms of the Geant4 Sof << 
 24 // *******************************************     21 // ********************************************************************
 25 //                                                 22 //
 26 // G4String                                    << 
 27 //                                                 23 //
 28 // Class description:                          <<  24 // $Id: G4String.hh,v 1.2 2001/11/29 14:45:12 gcosmo Exp $
                                                   >>  25 // GEANT4 tag $Name: geant4-04-00 $
 29 //                                                 26 //
 30 // Common string type for Geant4               <<  27 // 
                                                   >>  28 //---------------------------------------------------------------
                                                   >>  29 //  GEANT 4 class header file
 31 //                                                 30 //
 32 // Provides a `std::string` compliant implemen <<  31 //  G4String
 33 // strings. It currently inherits from `std::s << 
 34 // not be assumed other than that it will impl << 
 35 // as `std::string` as of the minimum C++ stan << 
 36 // (currently C++17).                          << 
 37 //                                                 32 //
 38 // It can be passed to any function accepting  <<  33 //  Class description:
 39 // arguments. Whilst it currently implements a << 
 40 // this should be considered deprecated for us << 
 41 // non-Geant4 functions taking `const char*` a << 
 42 // `std::string::c_str` member function to exp << 
 43 //                                             << 
 44 // See `std::string` for primary interfaces, ` << 
 45 //                                                 34 //
 46 // Author: G.Cosmo, 11 November 1999           <<  35 //  Definition of a Geant4 string.
 47 //-------------------------------------------- <<  36 //  Derived from the Rogue Wave implementation of RWCString;
                                                   >>  37 //  it uses intrinsically STL string.
 48                                                    38 
 49 #ifndef G4String_hh                            <<  39 //---------------------------------------------------------------
 50 #define G4String_hh 1                          << 
 51                                                    40 
 52 #include "G4Types.hh"                          <<  41 #ifndef __G4String
                                                   >>  42 #define __G4String
 53                                                    43 
 54 #include <algorithm>                           <<  44 #include <stdio.h>
 55 #include <cstdio>                              << 
 56 #include <cstring>                             << 
 57 #include <iostream>                            << 
 58 #include <string>                                  45 #include <string>
 59 #include <string_view>                         <<  46 #include "G4Types.hh"
                                                   >>  47 #include "g4std/iostream"
                                                   >>  48 
                                                   >>  49 #ifdef WIN32
                                                   >>  50   #define strcasecmp _stricmp
                                                   >>  51 #endif
                                                   >>  52 
                                                   >>  53 #ifdef G4USE_STD_NAMESPACE
                                                   >>  54   typedef G4std::string::size_type str_size;
                                                   >>  55 #else
                                                   >>  56   typedef size_t str_size;
                                                   >>  57 #endif
 60                                                    58 
 61 class G4String : public std::string            <<  59 class G4String;
                                                   >>  60 
                                                   >>  61 class G4SubString
 62 {                                                  62 {
 63  public:                                       <<  63 public:
 64   /// @brief                                   <<  64 
 65   /// @deprecated Will be removed in future re <<  65   inline G4SubString(const G4SubString&);
 66   enum caseCompare                             <<  66 
 67   {                                            <<  67   inline G4SubString& operator=(const char*);         
 68     exact,                                     <<  68 
 69     ignoreCase                                 <<  69   inline G4SubString& operator=(const G4String&);
 70   };                                           <<  70   inline G4SubString& operator=(const G4SubString&);
 71                                                <<  71  
 72   /// @brief                                   <<  72   inline char& operator()(str_size);
 73   /// @deprecated Will be removed in future re <<  73   inline char  operator()(str_size) const;
 74   enum stripType                               <<  74   inline char& operator[](str_size);
 75   {                                            <<  75   inline char  operator[](str_size) const;
 76     leading,                                   <<  76 
 77     trailing,                                  <<  77   inline G4int operator!() const;
 78     both                                       <<  78 
 79   };                                           <<  79   inline G4bool operator==(G4String) const;
 80                                                <<  80   inline G4bool operator==(const char*) const;
 81   using std::string::string;                   <<  81   inline G4bool operator!=(G4String) const;
 82   using std::string::operator=;                <<  82   inline G4bool operator!=(const char*) const;
 83                                                <<  83 
 84   inline G4String() = default;                 <<  84   inline str_size length() const;
 85   inline G4String(const std::string&);         <<  85   inline str_size start() const;
 86   inline G4String(const G4String&);            <<  86 
 87   inline G4String(std::string&&);              <<  87   // For detecting null substrings
 88   inline G4String(G4String&&);                 <<  88   //
                                                   >>  89   inline G4bool isNull() const;
                                                   >>  90 
                                                   >>  91 private:
                                                   >>  92 
                                                   >>  93   inline G4SubString(G4String&, str_size, str_size);
                                                   >>  94 
                                                   >>  95   G4String*    mystring;     
                                                   >>  96   str_size     mystart;
                                                   >>  97   str_size     extent;
                                                   >>  98 
                                                   >>  99   friend class G4String;
                                                   >> 100 
                                                   >> 101 };
                                                   >> 102  
                                                   >> 103 
                                                   >> 104 class G4String : public G4std::string
                                                   >> 105 {
                                                   >> 106 
                                                   >> 107   typedef G4std::string std_string;
                                                   >> 108 
                                                   >> 109 public: 
                                                   >> 110 
                                                   >> 111   enum caseCompare { exact, ignoreCase };
                                                   >> 112   enum stripType { leading, trailing, both };
                                                   >> 113 
                                                   >> 114   inline G4String ();
                                                   >> 115   inline G4String ( char );
                                                   >> 116   inline G4String ( const char * );
                                                   >> 117   inline G4String ( const G4String& );
                                                   >> 118   inline G4String ( const G4SubString& );
                                                   >> 119   inline G4String ( const std_string& );
                                                   >> 120   virtual ~G4String () {}
                                                   >> 121 
 89   inline G4String& operator=(const G4String&);    122   inline G4String& operator=(const G4String&);
 90   inline G4String& operator=(G4String&&);      << 123   inline G4String& operator=(const std_string&);
                                                   >> 124   inline G4String& operator=(const char*);
                                                   >> 125 
                                                   >> 126   inline char operator () (str_size) const; 
                                                   >> 127   inline char& operator () (str_size);
                                                   >> 128 
                                                   >> 129   inline G4String& operator+=(const G4SubString&);
                                                   >> 130   inline G4String& operator+=(const char*);
                                                   >> 131   inline G4String& operator+=(const std_string&);
                                                   >> 132   inline G4String& operator+=(const char&);
                                                   >> 133   inline G4bool operator==(const G4String&) const;
                                                   >> 134   inline G4bool operator==(const char*) const;
                                                   >> 135   inline G4bool operator!=(const G4String&) const;
                                                   >> 136   inline G4bool operator!=(const char*) const;
 91                                                   137 
 92   /// @brief Implicitly convert to `const char << 138   //inline G4String operator () (unsigned int, unsigned int);
 93   /// @deprecated Will be removed in future re << 
 94   ///   If passing `G4String` to functions req << 
 95   ///   to explicitly convert. `G4String` also << 
 96   ///   to match the `std::string` interface.  << 
 97   inline operator const char*() const;            139   inline operator const char*() const;
                                                   >> 140   inline G4SubString operator()(str_size, str_size);
 98                                                   141 
 99   /// @brief Override of subscript operator fo << 142   inline G4int compareTo(const char*, caseCompare mode=exact);
100   /// @deprecated Will be removed at the same  << 143   inline G4int compareTo(const G4String&, caseCompare mode=exact);
101   ///                                          << 144 
102   /// This override is required because of G4S << 145   inline G4String& prepend (const char*);
103   /// operator to `const char*`. Together with << 146   inline G4String& append (const G4String&);
104   /// `operator[](const char*, int) operator,  << 147 
105   /// [MSVC error C2666](https://docs.microsof << 148   inline G4std::istream& readLine (G4std::istream&, G4bool skipWhite=true);
106   /// This is a known issue with mixing implic << 
107   /// operators. Provision of the override wit << 
108   /// until the conversion operator is removed << 
109   inline reference operator[](int);            << 
110                                                << 
111   /// @overload                                << 
112   inline const_reference operator[](int) const << 
113                                                << 
114   /// @brief Deprecated function               << 
115   /// @deprecated Use `std::string::compare` o << 
116   [[deprecated("Use std::string::compare, or G << 
117   inline G4int compareTo(std::string_view, cas << 
118                                                << 
119   /// @brief Deprecated function               << 
120   /// @deprecated Use `std::getline` plus `G4S << 
121   [[deprecated("Use std::getline instead, plus << 
122   inline std::istream& readLine(std::istream&, << 
123                                                   149   
124   /// @brief Deprecated function               << 150   inline G4String& replace (unsigned int, unsigned int, 
125   /// @deprecated Use `std::string::erase` ins << 151                              const char*, unsigned int );
126   [[deprecated("Use std::string::erase instead << 152   inline G4String& replace(str_size, str_size, const char*);
127   inline G4String& remove(size_type);          << 153 
128                                                << 154   inline G4String& remove(str_size);
129   /// @brief Deprecated function               << 155   inline G4String& remove(str_size, str_size);
130   /// @deprecated Use `G4StrUtil::contains` in << 156 
131   [[deprecated("Use G4StrUtil::contains instea << 157   inline G4int first(char) const;
132   inline G4bool contains(const std::string&) c << 158   inline G4int last(char) const;
133                                                << 159 
134   /// @brief Deprecated function               << 160   inline G4bool contains(std_string) const;
135   /// @deprecated Use `G4StrUtil::contains` in << 
136   [[deprecated("Use G4StrUtil::contains instea << 
137   inline G4bool contains(char) const;             161   inline G4bool contains(char) const;
138                                                   162 
139   /// @brief Deprecated function               << 163   // stripType = 0 beginning
140   /// @deprecated Use `G4StrUtil` functions in << 164   // stripType = 1 end
141   [[deprecated("Use G4StrUtil::{lstrip,rstrip, << 165   // stripType = 2 both
142   [[nodiscard]] inline G4String strip(stripTyp << 166   //
143                                                << 167   inline G4String strip (G4int stripType=trailing, char c=' ');
144   /// @brief Deprecated function               << 
145   /// @deprecated Use `G4StrUtil` functions in << 
146   [[deprecated("Use G4StrUtil::to_lower/to_low << 
147   inline void toLower();                       << 
148                                                << 
149   /// @brief Deprecated function               << 
150   /// @deprecated Use `G4StrUtil` functions in << 
151   [[deprecated("Use G4StrUtil::to_upper/to_upp << 
152   inline void toUpper();                       << 
153 };                                             << 
154                                                   168 
155 /// @brief Query and manipulation functions fo << 169   inline void toLower ( void );
156 //                                             << 170   inline void toUpper ( void );
157 /// Additional free functions that are not par << 171 
158 /// of the minimum C++ standard supported by G << 172   inline G4bool isNull() const;
159 ///                                            << 173 
160 /// @see `G4String`                            << 174   inline str_size index (const char*, G4int pos=0) const; 
161 namespace G4StrUtil                            << 175   inline str_size index (char, G4int pos=0) const; 
162 {                                              << 176   inline str_size index (const G4String&, str_size, str_size, caseCompare) const;
163   /// @brief Convert string to lowercase       << 177 
164   /// @param[in, out] str the string to lowerc << 178   inline const char* data() const;
165   inline void to_lower(G4String& str);         << 179 
166                                                << 180   inline G4int strcasecompare(const char*, const char*) const;
167   /// @brief Return lowercased copy of string  << 181 
168   /// @param[in] str the string to lowercase   << 182   inline unsigned int hash( caseCompare cmp = exact ) const;
169   /// @return lowercased copy of `str`         << 183   inline unsigned int stlhash() const;
170   inline G4String to_lower_copy(G4String str); << 184 
171                                                << 185   // useful for supplying hash functions to template hash collection ctors
172   /// @brief Convert string to uppercase       << 186   //
173   /// @param[in, out] str the string to upperc << 187   static inline unsigned hash(const G4String&);
174   inline void to_upper(G4String& str);         << 188 
175                                                << 189 };
176   /// @brief Return uppercase copy of string   << 
177   /// @param[in] str the string to upper case  << 
178   /// @return uppercased copy of `str`         << 
179   inline G4String to_upper_copy(G4String str); << 
180                                                << 
181   /// @brief Remove leading characters from st << 
182   /// @param[in,out] str string to strip       << 
183   /// @param[in] ch character to remove        << 
184   /// @post `str` has any leading sequence of  << 
185   void lstrip(G4String& str, char ch = ' ');   << 
186                                                << 
187   /// @brief Remove trailing characters from s << 
188   /// @param[in,out] str string to strip       << 
189   /// @param[in] ch character to remove        << 
190   /// @post `str` has any trailing sequence of << 
191   void rstrip(G4String& str, char ch = ' ');   << 
192                                                << 
193   /// @brief Remove leading and trailing chara << 
194   /// @param[in,out] str string to strip       << 
195   /// @param[in] ch character to remove        << 
196   /// @post `str` has any leading and trailing << 
197   void strip(G4String& str, char ch = ' ');    << 
198                                                << 
199   /// @brief Return copy of string with leadin << 
200   /// @param[in] str string to copy and strip  << 
201   /// @param[in] ch character to remove        << 
202   /// @return copy of `str` with any leading s << 
203   G4String lstrip_copy(G4String str, char ch = << 
204                                                << 
205   /// @brief Return copy of string with traili << 
206   /// @param[in] str string to copy and strip  << 
207   /// @param[in] ch character to remove        << 
208   /// @return copy of `str` with any trailing  << 
209   G4String rstrip_copy(G4String str, char ch = << 
210                                                << 
211   /// @brief Return copy of string with leadin << 
212   /// @param[in] str string to copy and strip  << 
213   /// @param[in] ch character to remove        << 
214   /// @return copy of `str` with any leading a << 
215   G4String strip_copy(G4String str, char ch =  << 
216                                                << 
217   /// @brief Check if a string contains a give << 
218   /// @param[in] str string to be checked      << 
219   /// @param[in] ss substring to check for     << 
220   /// @retval true if `str` contains `ss`      << 
221   /// @retval false otherwise                  << 
222   inline G4bool contains(const G4String& str,  << 
223                                                << 
224   /// @overload                                << 
225   inline G4bool contains(const G4String& str,  << 
226                                                << 
227   /// @overload                                << 
228   inline G4bool contains(const G4String& str,  << 
229                                                << 
230   /// @overload                                << 
231   /// @note this overload is required to resol << 
232   ///   signatures taking `std::string_view` a << 
233   ///   arguments. G4String currently provides << 
234   ///   `const char*`, which makes the calls a << 
235   ///   implicit conversion to `std::string_vi << 
236   inline G4bool contains(const G4String& str,  << 
237                                                << 
238   /// @brief Case insensitive comparison of tw << 
239   ///                                          << 
240   /// Converts both input arguments to lower c << 
241   /// result of `std::string::compare` with th << 
242   ///                                          << 
243   /// @param[in] lhs the first string in the c << 
244   /// @param[in] rhs the second string in the  << 
245   /// @return negative(positive) `G4int` if lo << 
246   ///   before(after) lowercased `rhs` in lexi << 
247   ///   compare equivalent after lowercasing.  << 
248   inline G4int icompare(std::string_view lhs,  << 
249                                                << 
250   /// @brief Return true if a string starts wi << 
251   /// @param[in] str string to be checked      << 
252   /// @param[in] ss prefix to check for        << 
253   /// @retval true if `str` starts with `ss`   << 
254   /// @retval false otherwise                  << 
255   inline bool starts_with(const G4String& str, << 
256                                                << 
257   /// @overload                                << 
258   inline bool starts_with(const G4String& str, << 
259                                                << 
260   /// @overload                                << 
261   inline bool starts_with(const G4String& str, << 
262                                                << 
263   /// @overload                                << 
264   /// @note this overload is required to resol << 
265   ///   signatures taking `std::string_view` a << 
266   ///   arguments. G4String currently provides << 
267   ///   `const char*`, which makes the calls a << 
268   ///   implicit conversion to `std::string_vi << 
269   inline bool starts_with(const G4String& str, << 
270                                                << 
271   /// @brief Return true if a string ends with << 
272   /// @param[in] str string to be checked      << 
273   /// @param[in] ss suffix to check for        << 
274   /// @retval true if `str` ends with `ss`     << 
275   /// @retval false otherwise                  << 
276   inline bool ends_with(const G4String& str, s << 
277                                                << 
278   /// @overload                                << 
279   inline bool ends_with(const G4String& str, G << 
280                                                << 
281   /// @overload                                << 
282   inline bool ends_with(const G4String& str, c << 
283                                                << 
284   /// @overload                                << 
285   inline bool ends_with(const G4String& str, c << 
286                                                << 
287   /// @brief Remove specified in-range charact << 
288   ///                                          << 
289   /// Equivalent to `std::string::erase(index, << 
290   /// if `index <= size()`. When `index > size << 
291   ///                                          << 
292   /// @deprecated It is strongly recommended t << 
293   ///   start index is already checked, or oth << 
294   ///   implement the index-size comparison in << 
295   ///                                          << 
296   /// @param[in,out] str string to erase chara << 
297   /// @param[in] index position to start remov << 
298   /// @param[in] count number of characters to << 
299   /// @post `str` is unchanged if `index > str << 
300   ///   `min(count, str.size() - index)` chara << 
301   inline void safe_erase(G4String& str, G4Stri << 
302                          G4String::size_type c << 
303                                                << 
304   /// @brief Read characters into a G4String f << 
305   ///                                          << 
306   /// @deprecated It is strongly recommended t << 
307   ///   function, plus `G4StrUtil::lstrip` if  << 
308   ///                                          << 
309   /// @param[in] is input stream to read from  << 
310   /// @param[in,out] str string to read into   << 
311   /// @param[in] skipWhite if true, discard le << 
312   /// @return `is`                             << 
313   inline std::istream& readline(std::istream&  << 
314 }  // namespace G4StrUtil                      << 
315                                                   190 
316 #include "G4String.icc"                           191 #include "G4String.icc"
317                                                   192 
318 #endif                                            193 #endif
319                                                   194