Nemo  2.3.56
Simulate forward-in-time genetic evolution in a spatially explicit, individual-based stochastic simulator
tstring Class Reference

A global class to handle string conversions and operations. More...

#include <tstring.h>

Static Public Member Functions

static unsigned int str2uint (const string &str)
 Converts a string into an unsigned integer. More...
 
static unsigned long str2ulong (const string &str)
 Converts a string into an unsigned integer. More...
 
static int str2int (const string &str)
 Converts a string into an integer. More...
 
static double str2dble (const string &str)
 Converts a string into a double. More...
 
static string int2str (const int i)
 Writes an integer value into a string. More...
 
static string ulong2str (const unsigned long i)
 Writes an integer value into a string. More...
 
static string dble2str (const double d)
 Writes a floating-point value into a string. More...
 
static vector< string > split (const string &str, const char delim, bool splitOnce=false)
 splits a string into substrings (tokens) delimited by a single character. More...
 
static vector< string > splitExcludeEnclosedDelimiters (const string &str, const char delim=',', const string &encloser="([{\"")
 Splits a string into substrings (tokens) delimited by a single character. More...
 
static string getBlock (const string &str, const char start_c, const char end_c='\0', bool includeEnclosing=true)
 Reads a substring delimited by two enclosing character from a string. More...
 
static string __get_block (istringstream &IN, const char start_c, const char end_c)
 Internal function used by getBlock to recursively read nested blocks. More...
 
static string removeChar (const string &str, const char c)
 Removes a given character from a string. More...
 
static string removeFirstCharOf (const string &str, const char c)
 Removes the first of a character found in a string. More...
 
static string removeLastCharOf (const string &str, const char c)
 Removes the last of a character found in a string. More...
 
static string removeEnclosingChar (const string &str, const char o, const char c, bool allowMissing=false)
 Removes characters enclosing a string. More...
 
static bool isanumber (const string &str)
 Check whether the string is a number. More...
 
static bool isNA (const string &str)
 Check whether the string is NA | NaN. More...
 

Private Member Functions

 tstring ()
 

Detailed Description

A global class to handle string conversions and operations.

Allows to parse the parameters argument strings into various tokens and to remove encolsing characters from a string.

Constructor & Destructor Documentation

◆ tstring()

tstring::tstring ( )
inlineprivate
44{}

Member Function Documentation

◆ __get_block()

static string tstring::__get_block ( istringstream &  IN,
const char  start_c,
const char  end_c 
)
inlinestatic

Internal function used by getBlock to recursively read nested blocks.

268 {
269 string out;
270 char c;
271 bool closed = false;
272
273 out += start_c;
274// cout << "start block : "<<start_c<<endl;
275 while (IN.get(c) && IN.good() && !IN.eof() ) {
276
277 if(c == end_c) {
278
279 out += c;
280 closed = true;
281 break;
282
283 } else if(c == start_c) {//nested blocks
284
285 out += __get_block(IN, start_c, end_c);
286
287 } else out += c;
288
289 } //__end_while__
290// cout<<out<<endl;
291
292 if(!closed) fatal("missing closing character '%c' in %s.\n", end_c, IN.str().c_str());
293
294 // cout << "close block : "<< c << endl;
295
296 return out;
297 }
static string __get_block(istringstream &IN, const char start_c, const char end_c)
Internal function used by getBlock to recursively read nested blocks.
Definition: tstring.h:267
void fatal(const char *str,...)
Definition: output.cc:96

References __get_block(), and fatal().

Referenced by __get_block(), and getBlock().

+ Here is the caller graph for this function:

◆ dble2str()

static string tstring::dble2str ( const double  d)
inlinestatic

Writes a floating-point value into a string.

116 {
117 ostringstream OUT;
118 OUT << d;
119 return OUT.str();
120 }

Referenced by TTQFreqExtractor::FHwrite(), ParamsParser::rbernoul(), TTProtoWithMap::recordRandomMap(), ParamsParser::rexp(), ParamsParser::rgamma(), ParamsParser::rlognorm(), ParamsParser::rnorm(), ParamsParser::rpoiss(), ParamsParser::runif(), ParamsParser::seq(), and TTProtoWithMap::setRecombinationMapRandom().

+ Here is the caller graph for this function:

◆ getBlock()

static string tstring::getBlock ( const string &  str,
const char  start_c,
const char  end_c = '\0',
bool  includeEnclosing = true 
)
inlinestatic

Reads a substring delimited by two enclosing character from a string.

May or may not retain the enclosing characters.

211 {
212 string out;
213 char c, end = 0;
214 bool closed = false;
215
216 istringstream IN( removeEnclosingChar(str, ' ', ' ', true) );
217
218 IN.get(c);
219
220 if(end_c == 0) {
221 switch (c) {
222 case '(':
223 end = ')';
224 break;
225 case '{':
226 end = '}';
227 break;
228 case '[':
229 end = ']';
230 break;
231 case '"':
232 end = '"';
233 break;
234 default:
235 error("tstring::getBlock: unknown start of block \'%c\'\n", c);
236 break;
237 }
238 } else end = end_c;
239
240 out += c;
241
242 while (IN.get(c) && IN.good() && !IN.eof() ) {
243
244 if(c == end) {
245
246 out += c;
247 closed = true;
248 break;
249
250 } else if(c == start_c) {//nested blocks
251
252 out += __get_block(IN, start_c, end);
253
254 } else out += c;
255
256 } //__end_while__
257
258
259 if(!closed) fatal("missing closing character '%c' in %s.\n", end, str.c_str());
260
261 return out;
262 }
static string removeEnclosingChar(const string &str, const char o, const char c, bool allowMissing=false)
Removes characters enclosing a string.
Definition: tstring.h:352
int error(const char *str,...)
Definition: output.cc:77

References __get_block(), error(), fatal(), and removeEnclosingChar().

Referenced by splitExcludeEnclosedDelimiters().

+ Here is the caller graph for this function:

◆ int2str()

◆ isanumber()

static bool tstring::isanumber ( const string &  str)
inlinestatic

Check whether the string is a number.

382 {
383 unsigned int i = 0;
384
385 while(i < str.size()) {
386 if(!isdigit(str[i]))
387 if(str[i] != '.' && str[i] != 'e' && str[i] != '-' && str[i] != '+')
388 return false;
389 i++;
390 }
391
392 return true;
393 }

Referenced by FHPedigreeReader::FHread(), ParamsParser::getMacroSepParamChar(), ParamsParser::rbernoul(), ParamsParser::rep(), ParamsParser::rexp(), ParamsParser::rgamma(), ParamsParser::rlognorm(), ParamsParser::rnorm(), ParamsParser::rpoiss(), ParamsParser::runif(), ParamsParser::seq(), Param::set(), and ParamsParser::sym_matrix().

+ Here is the caller graph for this function:

◆ isNA()

static bool tstring::isNA ( const string &  str)
inlinestatic

Check whether the string is NA | NaN.

398 {
399 if("NA" == str) return true;
400
401 if("na" == str) return true;
402
403 if("NaN" == str) return true;
404
405 if("NAN" == str) return true;
406
407 if("nan" == str) return true;
408
409 return false;
410 }

Referenced by FHPedigreeReader::FHread().

+ Here is the caller graph for this function:

◆ removeChar()

static string tstring::removeChar ( const string &  str,
const char  c 
)
inlinestatic

Removes a given character from a string.

303 {
304 string s(str);
305
306 for (unsigned int i = 0; i < s.size(); i++) {
307 if (s[i] == c) {
308 s.erase(s.begin() + i);
309 i--;
310 }
311 }
312
313 return s;
314 }

◆ removeEnclosingChar()

static string tstring::removeEnclosingChar ( const string &  str,
const char  o,
const char  c,
bool  allowMissing = false 
)
inlinestatic

Removes characters enclosing a string.

Can be used to remove parenthesis/brackets or trailing whitespace characters.

Parameters
strthe string
othe opening (front) character
cthe closing (back) character
allowMissingif trus, allows to ignore a missing enclosing character
353 {
354 string s(str);
355 size_t first, last;
356
357 first = s.find_first_of(o, 0);
358 if(first != 0) {
359 if(!allowMissing) {
360 error("tstring::removeEnclosingChar:: string \"%s\" not starting with \"%c\"\n.", s.c_str(), o);
361 return s;
362 }
363 } else
364 s.erase(s.begin());
365
366 last = s.find_last_of(c);
367 if(last != s.length()-1 || last == string::npos) {
368 if(!allowMissing) {
369 error("tstring::removeEnclosingChar:: string \"%s\" not ending with \"%c\"\n.", s.c_str(), c);
370 return s;
371 }
372 } else
373 s.erase(s.end()-1);
374
375 return s;
376 }

References error().

Referenced by ParamsParser::concat(), ParamsParser::diag_matrix(), getBlock(), ParamsParser::getMacroSepParamChar(), ParamsParser::matrix(), Param::parseArgument(), ParamsParser::rep(), split(), splitExcludeEnclosedDelimiters(), ParamsParser::sym_matrix(), and ParamsParser::tempseq().

+ Here is the caller graph for this function:

◆ removeFirstCharOf()

static string tstring::removeFirstCharOf ( const string &  str,
const char  c 
)
inlinestatic

Removes the first of a character found in a string.

320 {
321 string out(str);
322 size_t pos;
323
324 if( (pos = out.find_first_of(c)) != string::npos )
325 out.erase(out.begin() + pos);
326
327 return out;
328 }

Referenced by Param::getArgumentFromFile(), and Param::parseTemporalArgument().

+ Here is the caller graph for this function:

◆ removeLastCharOf()

static string tstring::removeLastCharOf ( const string &  str,
const char  c 
)
inlinestatic

Removes the last of a character found in a string.

334 {
335 string out(str);
336 size_t pos;
337
338 if( (pos = out.find_last_of(c)) != string::npos )
339 out.erase(out.begin() + pos);
340
341 return out;
342 }

Referenced by ParamsParser::rep().

+ Here is the caller graph for this function:

◆ split()

static vector< string > tstring::split ( const string &  str,
const char  delim,
bool  splitOnce = false 
)
inlinestatic

splits a string into substrings (tokens) delimited by a single character.

Parameters
strthe input string
delimthe token delimiter
splitOnceif true, return the first token only
129 {
130 vector<string> tokens;
131 string out(str);
132 size_t pos = 0;
133
134 while(out.find(delim) != string::npos) {
135 pos = out.find_first_of(delim);
136 tokens.push_back( removeEnclosingChar(out.substr(0, pos), ' ', ' ', true) );
137 out = out.substr(pos+1);
138 if(splitOnce) break;
139 }
140
141 tokens.push_back( removeEnclosingChar(out, ' ', ' ', true) );
142
143 return tokens;
144 }

References removeEnclosingChar().

Referenced by ParamsParser::diag_matrix(), ParamsParser::matrix(), Param::parseTemporalArgument(), ParamsParser::rep(), splitExcludeEnclosedDelimiters(), ParamsParser::sym_matrix(), and ParamsParser::tempseq().

+ Here is the caller graph for this function:

◆ splitExcludeEnclosedDelimiters()

static vector< string > tstring::splitExcludeEnclosedDelimiters ( const string &  str,
const char  delim = ',',
const string &  encloser = "([{\"" 
)
inlinestatic

Splits a string into substrings (tokens) delimited by a single character.

The tokens may contain the delimiter character if it is enclosed. For instance: ‘(@g0 {{0,1,0,10}}, @g10 {{1,0,2,2}})’ --> [0] = ‘@g0 {{0,1,0,10}}’ and [1] = ‘@g10 {{1,0,2,2}}’

Parameters
strthe input string
delimthe token delimiter, is a comma by default
encloserthe character that starts an enclosed string
156 {\"")
157 {
158 if(str.find_first_of(encloser) == string::npos) return split(str, delim);
159
160 string::size_type open, delim_pos, next_index = 0;
161 string pair, block, tail(str);
162 vector<string> tokens;
163
164 while (tail.find(delim) != string::npos) {
165
166 delim_pos = tail.find_first_of(delim);
167
168 //check if delim is within any enclosed block
169 open = tail.find_first_of(encloser);
170
171 //read and remove blocks
172 while (open < delim_pos) {
173
174 block = getBlock(tail.substr(open, string::npos), tail.at(open));
175
176 next_index = open + block.size();
177
178 pair += tail.substr(0, next_index);
179
180 tail = tail.substr(next_index);
181
182 delim_pos = tail.find_first_of(delim);
183
184 open = tail.find_first_of(encloser);
185 }
186
187 pair += tail.substr(0, delim_pos);
188
189 pair = removeEnclosingChar(pair, ' ', ' ', true);
190
191 tokens.push_back(pair);
192 pair.clear();
193
194 if(delim_pos != string::npos) tail = tail.substr(delim_pos + 1);
195 else break;
196 }
197
198 if(tail.size() != 0) tokens.push_back( removeEnclosingChar(tail, ' ', ' ', true) );
199
200 return tokens;
201 }
static vector< string > split(const string &str, const char delim, bool splitOnce=false)
splits a string into substrings (tokens) delimited by a single character.
Definition: tstring.h:128
static string getBlock(const string &str, const char start_c, const char end_c='\0', bool includeEnclosing=true)
Reads a substring delimited by two enclosing character from a string.
Definition: tstring.h:209

References getBlock(), removeEnclosingChar(), and split().

Referenced by ParamsParser::getMacroArgs(), ParamsParser::getMacroParamValue(), ParamsParser::getMacroSepParamChar(), Param::parseArgument(), ParamsParser::rbernoul(), ParamsParser::rexp(), ParamsParser::rgamma(), ParamsParser::rlognorm(), ParamsParser::rnorm(), ParamsParser::rpoiss(), and ParamsParser::runif().

+ Here is the caller graph for this function:

◆ str2dble()

static double tstring::str2dble ( const string &  str)
inlinestatic

Converts a string into a double.

85 {
86 istringstream IN(str);
87 double d;
88 IN >> d;
89 return d;
90 }

Referenced by ParamsParser::rbernoul(), ParamsParser::rexp(), ParamsParser::rgamma(), ParamsParser::rlognorm(), ParamsParser::rnorm(), ParamsParser::rpoiss(), ParamsParser::runif(), ParamsParser::seq(), Param::set(), and ParamsParser::sym_matrix().

+ Here is the caller graph for this function:

◆ str2int()

static int tstring::str2int ( const string &  str)
inlinestatic

Converts a string into an integer.

74 {
75 istringstream IN(str);
76 int i;
77 IN >> i;
78 return i;
79 }

Referenced by ParamsParser::rep(), Param::set(), LCE_StatServiceNotifier::setOccurence(), LCE_Cross::setParameters(), and ParamsParser::sym_matrix().

+ Here is the caller graph for this function:

◆ str2uint()

static unsigned int tstring::str2uint ( const string &  str)
inlinestatic

Converts a string into an unsigned integer.

52 {
53 istringstream IN(str);
54 unsigned int i;
55 IN >> i;
56 return i;
57 }

Referenced by ParamsParser::diag_matrix(), ParamsParser::matrix(), Param::parseTemporalArgument(), ParamsParser::rbernoul(), ParamsParser::rexp(), ParamsParser::rgamma(), ParamsParser::rlognorm(), ParamsParser::rnorm(), ParamsParser::rpoiss(), and ParamsParser::runif().

+ Here is the caller graph for this function:

◆ str2ulong()

static unsigned long tstring::str2ulong ( const string &  str)
inlinestatic

Converts a string into an unsigned integer.

63 {
64 istringstream IN(str);
65 unsigned long i;
66 IN >> i;
67 return i;
68 }

Referenced by FHPedigreeReader::FHread().

+ Here is the caller graph for this function:

◆ ulong2str()

static string tstring::ulong2str ( const unsigned long  i)
inlinestatic

Writes an integer value into a string.

106 {
107 ostringstream OUT;
108 OUT << i;
109 return OUT.str();
110 }

Referenced by SimRunner::run().

+ Here is the caller graph for this function:

The documentation for this class was generated from the following file:

Generated for Nemo v2.3.56 by  doxygen 1.9.0 -- Nemo is hosted on  Download Nemo

Locations of visitors to this page
Catalogued on GSR