string.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::string
26 
27 Description
28  A class for handling character strings derived from std::string.
29 
30  Strings may contain any characters and therefore are delimited by quotes
31  for IO : "any list of characters".
32 
33  Used as a base class for word and fileName.
34 
35 See also
36  Foam::findEtcFile() for information about the site/user OpenFOAM
37  configuration directory
38 
39 SourceFiles
40  string.C
41  stringIO.C
42 
43 \*---------------------------------------------------------------------------*/
44 
45 #ifndef string_H
46 #define string_H
47 
48 #include "char.H"
49 #include "Hasher.H"
50 
51 #include <string>
52 #include <cstring>
53 #include <cstdlib>
54 
55 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
56 
57 namespace Foam
58 {
59 
60 // Forward declaration of classes
61 class Istream;
62 class Ostream;
63 
64 // Forward declaration of friend functions and operators
65 class string;
66 Istream& operator>>(Istream&, string&);
67 Ostream& operator<<(Ostream&, const string&);
68 Ostream& operator<<(Ostream&, const std::string&);
69 
70 
71 /*---------------------------------------------------------------------------*\
72  Class string Declaration
73 \*---------------------------------------------------------------------------*/
74 
75 class string
76 :
77  public std::string
78 {
79 public:
80 
81  // Static Data Members
82 
83  static const char* const typeName;
84  static int debug;
85 
86  //- An empty string
87  static const string null;
88 
89 
90  //- Hashing function class, shared by all the derived classes
91  class hash
92  {
93  public:
94  hash()
95  {}
96 
97  inline unsigned operator()(const string&, unsigned seed = 0) const;
98  };
99 
100 
101  // Constructors
102 
103  //- Construct null
104  inline string();
105 
106  //- Construct from std::string
107  inline string(const std::string&);
108 
109  //- Copy constructor
110  inline string(const string&);
111 
112  //- Move constructor
113  inline string(string&&);
114 
115  //- Construct as copy of character array
116  inline string(const char*);
117 
118  //- Construct as copy of specified number of characters
119  inline string(const char*, const size_type);
120 
121  //- Construct from a single character
122  inline string(const char);
123 
124  //- Construct from copies of a single character
125  inline string(const size_type, const char);
126 
127  //- Construct from Istream
128  string(Istream&);
129 
130 
131  // Member Functions
132 
133  //- Count and return the number of a given character in the string
134  size_type count(const char) const;
135 
136  //- Is this string type valid?
137  template<class String>
138  static inline bool valid(const string&);
139 
140  //- Does this string have particular meta-characters?
141  // The meta characters can be optionally quoted.
142  template<class String>
143  static inline bool meta(const string&, const char quote='\\');
144 
145  //- Strip invalid characters from the given string
146  template<class String>
147  static inline bool stripInvalid(string&);
148 
149  //- Return a valid String from the given string
150  template<class String>
151  static inline String validate(const string&);
152 
153  //- Return a String with quoted meta-characters from the given string
154  template<class String>
155  static inline string quotemeta(const string&, const char quote='\\');
156 
157  //- True when strings match literally
158  inline bool match(const std::string&) const;
159 
160  //- Avoid masking the normal std::string replace
161  using std::string::replace;
162 
163  //- Replace first occurrence of sub-string oldStr with newStr
164  // starting at start
165  string& replace
166  (
167  const string& oldStr,
168  const string& newStr,
169  size_type start = 0
170  );
171 
172  //- Replace all occurrences of sub-string oldStr with newStr
173  // starting at start
174  string& replaceAll
175  (
176  const string& oldStr,
177  const string& newStr,
178  size_type start = 0
179  );
180 
181  //- Expand initial tildes and all occurrences of environment variables
182  // Expansion includes:
183  // -# environment variables
184  // - "$VAR", "${VAR}"
185  // -# current directory
186  // - leading "./" : the current directory
187  // -# tilde expansion
188  // - leading "~/" : home directory
189  // - leading "~user" : home directory for specified user
190  // - leading "~OpenFOAM" : site/user OpenFOAM configuration directory
191  //
192  // Any unknown entries are removed silently if allowEmpty is true
193  // \sa
194  // Foam::findEtcFile
195  string& expand(const bool allowEmpty = false);
196 
197  //- Remove repeated characters returning true if string changed
198  bool removeRepeated(const char);
199 
200  //- Return string with repeated characters removed
201  string removeRepeated(const char) const;
202 
203  //- Remove trailing character returning true if string changed
204  bool removeTrailing(const char);
205 
206  //- Return string with trailing character removed
207  string removeTrailing(const char) const;
208 
209 
210  // Member Operators
211 
212  //- Return the sub-string from the i-th character for \a n characters
213  inline string operator()
214  (
215  const size_type i,
216  const size_type n
217  ) const;
218 
219  //- Return the sub-string from the first character for \a n characters
220  inline string operator()
221  (
222  const size_type n
223  ) const;
224 
225  inline void operator=(const string&);
226  inline void operator=(string&&);
227 
228 
229  // IOstream Operators
230 
231  friend Istream& operator>>(Istream&, string&);
232  friend Ostream& operator<<(Ostream&, const string&);
233 };
234 
235 
236 void writeEntry(Ostream& os, const char* value);
237 void writeEntry(Ostream& os, const string& value);
238 
239 
240 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
241 
242 } // End namespace Foam
243 
244 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
245 
246 #include "stringI.H"
247 
248 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
249 
250 #endif
251 
252 // ************************************************************************* //
bool removeRepeated(const char)
Remove repeated characters returning true if string changed.
Definition: string.C:102
static bool meta(const string &, const char quote='\\')
Does this string have particular meta-characters?
Definition: stringI.H:127
Hashing function class, shared by all the derived classes.
Definition: string.H:90
size_type count(const char) const
Count and return the number of a given character in the string.
Definition: string.C:39
string & replaceAll(const string &oldStr, const string &newStr, size_type start=0)
Replace all occurrences of sub-string oldStr with newStr.
Definition: string.C:74
unsigned operator()(const string &, unsigned seed=0) const
Definition: stringI.H:220
An Istream is an abstract base class for all input systems (streams, files, token lists etc)...
Definition: Istream.H:57
static String validate(const string &)
Return a valid String from the given string.
Definition: stringI.H:187
bool match(const std::string &) const
True when strings match literally.
Definition: stringI.H:194
friend Ostream & operator<<(Ostream &, const string &)
A character and a pointer to a character string.
static string quotemeta(const string &, const char quote='\\')
Return a String with quoted meta-characters from the given string.
static const char *const typeName
Definition: string.H:82
friend Istream & operator>>(Istream &, string &)
static int debug
Definition: string.H:83
Istream & operator>>(Istream &, directionInfo &)
graph_traits< Graph >::vertices_size_type size_type
Definition: SloanRenumber.C:73
static const string null
An empty string.
Definition: string.H:86
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:53
string()
Construct null.
Definition: stringI.H:30
void writeEntry(Ostream &os, const HashTable< T, Key, Hash > &ht)
Definition: HashTableIO.C:96
string & replace(const string &oldStr, const string &newStr, size_type start=0)
Replace first occurrence of sub-string oldStr with newStr.
Definition: string.C:56
string & expand(const bool allowEmpty=false)
Expand initial tildes and all occurrences of environment variables.
Definition: string.C:95
Misc. hashing functions, mostly from Bob Jenkins.
Ostream & operator<<(Ostream &, const ensightPart &)
void operator=(const string &)
Definition: stringI.H:229
label n
static bool valid(const string &)
Is this string type valid?
Definition: stringI.H:79
static bool stripInvalid(string &)
Strip invalid characters from the given string.
Definition: stringI.H:93
bool removeTrailing(const char)
Remove trailing character returning true if string changed.
Definition: string.C:148
A class for handling character strings derived from std::string.
Definition: string.H:74
Namespace for OpenFOAM.