00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef __G4String
00044 #define __G4String
00045
00046 #include <stdio.h>
00047 #include <string>
00048 #include <cstring>
00049
00050 #include "G4Types.hh"
00051 #include <iostream>
00052
00053 #ifdef WIN32
00054 #define strcasecmp _stricmp
00055 #endif
00056
00057 typedef std::string::size_type str_size;
00058
00059 class G4String;
00060
00061 class G4SubString
00062 {
00063 public:
00064
00065 inline G4SubString(const G4SubString&);
00066
00067 inline G4SubString& operator=(const char*);
00068
00069 inline G4SubString& operator=(const G4String&);
00070 inline G4SubString& operator=(const G4SubString&);
00071
00072 inline char& operator()(str_size);
00073 inline char operator()(str_size) const;
00074 inline char& operator[](str_size);
00075 inline char operator[](str_size) const;
00076
00077 inline G4int operator!() const;
00078
00079 inline G4bool operator==(const G4String&) const;
00080 inline G4bool operator==(const char*) const;
00081 inline G4bool operator!=(const G4String&) const;
00082 inline G4bool operator!=(const char*) const;
00083
00084 inline str_size length() const;
00085 inline str_size start() const;
00086
00087
00088
00089 inline G4bool isNull() const;
00090
00091 private:
00092
00093 inline G4SubString(G4String&, str_size, str_size);
00094
00095 G4String* mystring;
00096 str_size mystart;
00097 str_size extent;
00098
00099 friend class G4String;
00100
00101 };
00102
00103
00104 class G4String : public std::string
00105 {
00106
00107 typedef std::string std_string;
00108
00109 public:
00110
00111 enum caseCompare { exact, ignoreCase };
00112 enum stripType { leading, trailing, both };
00113
00114 inline G4String ();
00115 inline G4String ( char );
00116 inline G4String ( const char * );
00117 inline G4String ( const char *, str_size );
00118 inline G4String ( const G4String& );
00119 inline G4String ( const G4SubString& );
00120 inline G4String ( const std::string & );
00121 ~G4String () {}
00122
00123 inline G4String& operator=(const G4String&);
00124 inline G4String& operator=(const std::string &);
00125 inline G4String& operator=(const char*);
00126
00127 inline char operator () (str_size) const;
00128 inline char& operator () (str_size);
00129
00130 inline G4String& operator+=(const G4SubString&);
00131 inline G4String& operator+=(const char*);
00132 inline G4String& operator+=(const std::string &);
00133 inline G4String& operator+=(const char&);
00134 inline G4bool operator==(const G4String&) const;
00135 inline G4bool operator==(const char*) const;
00136 inline G4bool operator!=(const G4String&) const;
00137 inline G4bool operator!=(const char*) const;
00138
00139 inline operator const char*() const;
00140 inline G4SubString operator()(str_size, str_size);
00141
00142 inline G4int compareTo(const char*, caseCompare mode=exact) const;
00143 inline G4int compareTo(const G4String&, caseCompare mode=exact) const;
00144
00145 inline G4String& prepend (const char*);
00146 inline G4String& append (const G4String&);
00147
00148 inline std::istream& readLine (std::istream&, G4bool skipWhite=true);
00149
00150 inline G4String& replace (unsigned int, unsigned int,
00151 const char*, unsigned int );
00152 inline G4String& replace(str_size, str_size, const char*);
00153
00154 inline G4String& remove(str_size);
00155 inline G4String& remove(str_size, str_size);
00156
00157 inline G4int first(char) const;
00158 inline G4int last(char) const;
00159
00160 inline G4bool contains(const std::string&) const;
00161 inline G4bool contains(char) const;
00162
00163
00164
00165
00166
00167 inline G4String strip (G4int strip_Type=trailing, char c=' ');
00168
00169 inline void toLower ();
00170 inline void toUpper ();
00171
00172 inline G4bool isNull() const;
00173
00174 inline str_size index (const char*, G4int pos=0) const;
00175 inline str_size index (char, G4int pos=0) const;
00176 inline str_size index (const G4String&, str_size, str_size, caseCompare) const;
00177
00178 inline const char* data() const;
00179
00180 inline G4int strcasecompare(const char*, const char*) const;
00181
00182 inline unsigned int hash( caseCompare cmp = exact ) const;
00183 inline unsigned int stlhash() const;
00184 };
00185
00186 #include "G4String.icc"
00187
00188 #endif