Loading...
Searching...
No Matches
Foam::stringOps Namespace Reference

Collection of static functions for various string-related operations. More...

Classes

struct  natural_sort
 Encapsulation of natural order sorting for algorithms. More...

Functions

std::string::size_type count (const char *s, const char c)
 Count the number of occurrences of the specified character.
std::string::size_type count (const std::string &s, const char c)
 Count the number of occurrences of the specified character.
bool match (const UList< wordRe > &selectors, const std::string &text)
 True if text matches one of the selector expressions.
template<class StringType, class UnaryPredicate>
StringType quotemeta (const StringType &str, const UnaryPredicate &meta, const char quote='\\')
 Quote any meta-characters in given string.
string expand (const std::string &s, const HashTable< string > &mapping, const char sigil='$')
 Expand occurrences of variables according to the mapping and return the expanded string.
void inplaceExpand (std::string &s, const HashTable< string > &mapping, const char sigil='$')
 Inplace expand occurrences of variables according to the mapping. Does not use environment values.
void inplaceExpand (std::string &s, const dictionary &dict, const bool allowEnv, const bool allowEmpty, const bool allowSubDict=false, const char sigil='$')
 Inplace expand occurrences of variables according to the dictionary and (optionally) environment variables.
string expand (const std::string &s, const dictionary &dict, const char sigil='$')
 Expand occurrences of dictionary or environment variables.
void inplaceExpand (std::string &s, const dictionary &dict, const char sigil='$')
 Inplace expand occurrences of dictionary or environment variables.
string expand (const std::string &s, const bool allowEmpty=false)
 Expand initial tags, tildes, and all occurrences of environment variables.
void inplaceExpand (std::string &s, const bool allowEmpty=false)
 Expand initial tags, tildes, and all occurrences of environment variables.
bool inplaceReplaceVar (std::string &s, const word &varName)
 Replace environment variable contents with its name.
template<class StringType, class UnaryPredicate>
StringType validate (const std::string &str, const UnaryPredicate &accept, const bool invert=false)
 Return a copy of the input string with validated characters.
std::pair< size_t, size_t > findTrim (const std::string &s, size_t pos=0, size_t len=std::string::npos)
 Find (first, last) non-space locations in string or sub-string.
string trimLeft (const std::string &s)
 Return string trimmed of leading whitespace.
void inplaceTrimLeft (std::string &s)
 Trim leading whitespace inplace.
string trimRight (const std::string &s)
 Return string trimmed of trailing whitespace.
void inplaceTrimRight (std::string &s)
 Trim trailing whitespace inplace.
string trim (const std::string &s)
 Return string trimmed of leading and trailing whitespace.
void inplaceTrim (std::string &s)
 Trim leading and trailing whitespace inplace.
void inplaceRemoveSpace (std::string &s)
 Eliminate whitespace inplace.
string removeComments (const std::string &s)
 Return string with C/C++ comments removed.
void inplaceRemoveComments (std::string &s)
 Remove C/C++ comments inplace.
string lower (const std::string &s)
 Return string copy transformed with std::tolower on each character.
void inplaceLower (std::string &s)
 Inplace transform string with std::tolower on each character.
string upper (const std::string &s)
 Return string copy transformed with std::toupper on each character.
void inplaceUpper (std::string &s)
 Inplace transform string with std::toupper on each character.
label splitFunctionArgs (const std::string &str, wordRes &args, List< Tuple2< word, string > > &namedArgs)
 Split out arguments (named or unnamed) from an input string.
Foam::SubStrings split (const std::string &str, const char delim, std::string::size_type pos=0, const bool keepEmpty=false)
 Split string into sub-strings at the delimiter character.
Foam::SubStrings split (const std::string &str, const std::string &delim, std::string::size_type pos=0, const bool keepEmpty=false)
 Split string into sub-strings using delimiter string.
Foam::SubStrings splitAny (const std::string &str, const std::string &delim, std::string::size_type pos=0)
 Split string into sub-strings using any characters in delimiter.
Foam::SubStrings splitFixed (const std::string &str, const std::string::size_type width, std::string::size_type pos=0)
 Split string into sub-strings using a fixed field width.
Foam::SubStrings splitSpace (const std::string &str, std::string::size_type pos=0)
 Split string into sub-strings at whitespace (TAB, NL, VT, FF, CR, SPC).
void writeWrapped (OSstream &os, const std::string &str, const std::string::size_type width, const std::string::size_type indent=0, const bool escape=false)
 Output string with text wrapping.
string evaluate (label fieldWidth, const std::string &s, size_t pos=0, size_t len=std::string::npos)
 String evaluation with specified (positive, non-zero) field width.
string evaluate (const std::string &s, size_t pos=0, size_t len=std::string::npos)
 A simple string evaluation that handles various basic expressions. For trivial input, use readScalar instead (faster).
int natstrcmp (const char *s1, const char *s2)
 'Natural' compare for C-strings

Detailed Description

Collection of static functions for various string-related operations.

Source files

Function Documentation

◆ count() [1/2]

std::string::size_type count ( const char * s,
const char c )

Count the number of occurrences of the specified character.

Correctly handles nullptr.

References s().

Referenced by string::count().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ count() [2/2]

std::string::size_type count ( const std::string & s,
const char c )

Count the number of occurrences of the specified character.

References s().

Here is the call graph for this function:

◆ match()

bool match ( const UList< wordRe > & selectors,
const std::string & text )
inline

True if text matches one of the selector expressions.

Definition at line 79 of file stringOps.H.

References wordRes::match().

Here is the call graph for this function:

◆ quotemeta()

template<class StringType, class UnaryPredicate>
StringType quotemeta ( const StringType & str,
const UnaryPredicate & meta,
const char quote = '\\' )

Quote any meta-characters in given string.

Referenced by ddt2::read().

Here is the caller graph for this function:

◆ expand() [1/3]

string expand ( const std::string & s,
const HashTable< string > & mapping,
const char sigil = '$' )

Expand occurrences of variables according to the mapping and return the expanded string.

See also
stringOps::inplaceExpand() for details

References s().

Referenced by dynamicCode::copyOrCreateFiles(), argList::displayDoc(), and functionObjectList::findDict().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ inplaceExpand() [1/4]

void inplaceExpand ( std::string & s,
const HashTable< string > & mapping,
const char sigil = '$' )

Inplace expand occurrences of variables according to the mapping. Does not use environment values.

Expansion includes:

  1. Variables
    • $VAR
    • ${VAR}
  2. Default and alternative values as per the POSIX shell:
    • ${parameter:-defValue} If parameter is unset or null, the defValue is substituted. Otherwise, the value of parameter is substituted.
    • ${parameter:+altValue} If parameter is unset or null, nothing is substituted. Otherwise the altValue is substituted.

General behaviour:

  • Unknown entries are removed silently.
  • Malformed entries (eg, brace mismatch, sigil followed by unknown characters) are left as is.
Parameters
[in,out]sThe string to modify inplace.
mappingThe lookup table
sigilThe leading sigil. Can be changed to avoid conflict with other string expansions. (default: '$')
Expansion behaviour
  • alternatives = True
  • environment = False
  • allow empty = True
  • subDict = Not applicable
Note
Currently only used by Foam::dynamicCode.

References s().

Referenced by dynamicCode::copyAndFilter(), string::expand(), dynamicCodeContext::inplaceExpand(), expressionEntry::inplaceExpand(), entry::New(), includeEtcEntry::resolveEtcFile(), and includeEntry::resolveFile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ inplaceExpand() [2/4]

void inplaceExpand ( std::string & s,
const dictionary & dict,
const bool allowEnv,
const bool allowEmpty,
const bool allowSubDict = false,
const char sigil = '$' )

Inplace expand occurrences of variables according to the dictionary and (optionally) environment variables.

Expansion includes:

  1. Dictionary variables and (optionally) environment variables
    • $VAR
    • ${VAR}
    • ${VAR:-defValue}
    • ${VAR:+altValue}
  2. Mathematical evaluation using stringOps::evaluate
    • ${{EXPR}}
  3. Current directory
  4. Leading tag expansion for commonly used directories
    • <etc>/ : user/group/other OpenFOAM etc directory
    • <etc:[ugoa]+)>/ : user/group/other etc with specified location mode
    • <case>/ : The $FOAM_CASE directory
    • <constant>/ : The $FOAM_CASE/constant directory
    • <system>/ : The $FOAM_CASE/system directory
  5. Tilde expansion
    • leading "~/" : home directory
    • leading "~user" : home directory for specified user
  6. Default and alternative values as per the POSIX shell:
    • ${parameter:-defValue} If parameter is unset or null, the defValue is substituted. Otherwise, the value of parameter is substituted.
    • ${parameter:+altValue} If parameter is unset or null, nothing is substituted. Otherwise the altValue is substituted.

General behaviour:

  • Malformed entries (eg, brace mismatch, sigil followed by unknown characters) are left as is.
  • Supports recursive variable expansions. For example, "${var${num}}" and "${{100 + ${var}}}"
Parameters
[in,out]sThe string to modify inplace
dictThe dictionary context for the expansion
allowEnvAllow use of environment values as fallback
allowEmptyAllow empty expansions, or treat as Fatal
allowSubDictAllow expansion of subDict entries as well as primitive entries (default: false)
sigilThe leading sigil. Can be changed to avoid conflict with other string expansions. (default: '$')
See also
Foam::findEtcEntry(), Foam::findEtcEntries(), stringOps::evaluate()
Expansion behaviour
  • alternatives = True
  • environment = Given by parameter
  • allow empty = Given by parameter
  • subDict = Given by parameter (default: False)
Note
This function has too many parameters and should generally be avoided in user coding.

References dict, and s().

Here is the call graph for this function:

◆ expand() [2/3]

string expand ( const std::string & s,
const dictionary & dict,
const char sigil = '$' )

Expand occurrences of dictionary or environment variables.

Empty expansions are allowed. Serialization of subDict entries is permitted.

See also
stringOps::inplaceExpand(std::string&, const dictionary&, char)

References dict, and s().

Here is the call graph for this function:

◆ inplaceExpand() [3/4]

void inplaceExpand ( std::string & s,
const dictionary & dict,
const char sigil = '$' )

Inplace expand occurrences of dictionary or environment variables.

Empty expansions are allowed. Serialization of subDict entries is permitted.

See also
stringOps::inplaceExpand (std::string&, const dictionary&, bool, bool, bool, char)
Expansion behaviour
  • alternatives = True
  • environment = True
  • allow empty = True
  • subDict = True

References dict, and s().

Here is the call graph for this function:

◆ expand() [3/3]

string expand ( const std::string & s,
const bool allowEmpty = false )

Expand initial tags, tildes, and all occurrences of environment variables.

See also
stringOps::inplaceExpand(std::string&, bool);

References s().

Here is the call graph for this function:

◆ inplaceExpand() [4/4]

void inplaceExpand ( std::string & s,
const bool allowEmpty = false )

Expand initial tags, tildes, and all occurrences of environment variables.

The expansion behaviour is identical to stringOps::inplaceExpand (std::string&, const dictionary&, bool, bool, bool, char) except that there is no dictionary and the environment variables are always enabled.

Expansion behaviour
  • alternatives = True
  • environment = True
  • allow empty = Given by parameter (default: False)
  • subDict = Not applicable

References s().

Here is the call graph for this function:

◆ inplaceReplaceVar()

bool inplaceReplaceVar ( std::string & s,
const word & varName )

Replace environment variable contents with its name.

This is essentially the inverse operation for inplaceExpand for a single element. Return true if a replacement was successful.

References s().

Here is the call graph for this function:

◆ validate()

template<class StringType, class UnaryPredicate>
StringType validate ( const std::string & str,
const UnaryPredicate & accept,
const bool invert = false )

Return a copy of the input string with validated characters.

Parameters
invertInvert the test logic

References Foam::invert().

Here is the call graph for this function:

◆ findTrim()

std::pair< size_t, size_t > findTrim ( const std::string & s,
size_t pos = 0,
size_t len = std::string::npos )

Find (first, last) non-space locations in string or sub-string.

This may change to std::string_view in the future.

References Foam::pos(), and s().

Here is the call graph for this function:

◆ trimLeft()

string trimLeft ( const std::string & s)

Return string trimmed of leading whitespace.

References s().

Here is the call graph for this function:

◆ inplaceTrimLeft()

void inplaceTrimLeft ( std::string & s)

Trim leading whitespace inplace.

References s().

Here is the call graph for this function:

◆ trimRight()

string trimRight ( const std::string & s)

Return string trimmed of trailing whitespace.

References s().

Here is the call graph for this function:

◆ inplaceTrimRight()

void inplaceTrimRight ( std::string & s)

Trim trailing whitespace inplace.

References s().

Referenced by Foam::readEnsightString(), and ensightSurfaceReader::readLine().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ trim()

string trim ( const std::string & s)

Return string trimmed of leading and trailing whitespace.

References s().

Referenced by exprDriver::addVariables(), and substitutionModel::cleanKey().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ inplaceTrim()

void inplaceTrim ( std::string & s)

Trim leading and trailing whitespace inplace.

References s().

Referenced by exprDriver::addVariables(), dynamicCodeContext::inplaceExpand(), expressionEntry::inplaceExpand(), and exprString::trim().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ inplaceRemoveSpace()

void inplaceRemoveSpace ( std::string & s)

Eliminate whitespace inplace.

References s().

Referenced by Foam::getIdentifier().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ removeComments()

string removeComments ( const std::string & s)

Return string with C/C++ comments removed.

References s().

Here is the call graph for this function:

◆ inplaceRemoveComments()

void inplaceRemoveComments ( std::string & s)

Remove C/C++ comments inplace.

References s().

Referenced by exprString::inplaceExpand().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ lower()

string lower ( const std::string & s)

Return string copy transformed with std::tolower on each character.

References s().

Referenced by STLAsciiParseManual::execute().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ inplaceLower()

void inplaceLower ( std::string & s)

Inplace transform string with std::tolower on each character.

References s().

Referenced by STARCDMeshReader::readBoundary().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ upper()

string upper ( const std::string & s)

Return string copy transformed with std::toupper on each character.

References s().

Referenced by ABAQUSCore::readHelper::addNewElset(), substitutionModel::cleanKey(), Foam::getIdentifier(), argList::printMan(), ABAQUSCore::readHelper::read(), ABAQUSCore::readHelper::readSurfaceElements(), and Foam::writeCoordHeader().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ inplaceUpper()

void inplaceUpper ( std::string & s)

Inplace transform string with std::toupper on each character.

References s().

Here is the call graph for this function:

◆ splitFunctionArgs()

label splitFunctionArgs ( const std::string & str,
wordRes & args,
List< Tuple2< word, string > > & namedArgs )

Split out arguments (named or unnamed) from an input string.

For example,

* (U)
*     -> named = ()
*     -> unnamed = (U)
* 
* (patch=inlet, p)
*     -> named = ((patch inlet))
*     -> unnamed = (p)
* 
* testing, start=100, stop=200
*     -> named = ((start 100)(stop 200))
*     -> unnamed = (testing)
* 
Returns
total number of arguments

References args.

Referenced by functionObjectList::readFunctionObject().

Here is the caller graph for this function:

◆ split() [1/2]

Foam::SubStrings split ( const std::string & str,
const char delim,
std::string::size_type pos = 0,
const bool keepEmpty = false )

Split string into sub-strings at the delimiter character.

Empty sub-strings are normally suppressed. Behaviour is ill-defined if delim is a NUL character.

Parameters
strThe string to split
delimThe delimiter for splitting. Ill-defined if NUL character
posOffset within string to start splitting
keepEmptyRetain empty fields

References Foam::pos().

Referenced by exprDriver::addVariables(), dictionary::cfindScopedDict(), fileName::component(), fileName::components(), loadLibrary(), dictionary::makeScopedDict(), and NASsurfaceFormat< Face >::read().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ split() [2/2]

Foam::SubStrings split ( const std::string & str,
const std::string & delim,
std::string::size_type pos = 0,
const bool keepEmpty = false )

Split string into sub-strings using delimiter string.

Empty sub-strings are normally suppressed.

Parameters
strThe string to split
delimThe delimiters for splitting. Ill-defined if empty
posOffset within string to start splitting
keepEmptyRetain empty fields

References Foam::pos().

Here is the call graph for this function:

◆ splitAny()

Foam::SubStrings splitAny ( const std::string & str,
const std::string & delim,
std::string::size_type pos = 0 )

Split string into sub-strings using any characters in delimiter.

Empty sub-strings are normally suppressed. Behaviour is ill-defined if delim is an empty string.

Parameters
strThe string to split
delimThe delimiters for splitting. Ill-defined if empty!
posOffset within string to start splitting

References Foam::pos().

Referenced by Foam::splitStringToList(), and basicThermo::splitThermoName().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ splitFixed()

Foam::SubStrings splitFixed ( const std::string & str,
const std::string::size_type width,
std::string::size_type pos = 0 )

Split string into sub-strings using a fixed field width.

Behaviour is ill-defined if width is zero.

Parameters
strThe string to split
widthFixed field width for each sub-string
posOffset within string to start splitting

References Foam::pos().

Here is the call graph for this function:

◆ splitSpace()

Foam::SubStrings splitSpace ( const std::string & str,
std::string::size_type pos = 0 )

Split string into sub-strings at whitespace (TAB, NL, VT, FF, CR, SPC).

Empty sub-strings are suppressed.

Parameters
strThe string to split
posOffset within string to start splitting

References Foam::pos().

Referenced by argList::displayDoc(), ensightReadFile::getTimeStepFooter(), OBJedgeFormat::read(), OBJsurfaceFormat< Face >::read(), and ensightSurfaceReader::readCase().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ writeWrapped()

void writeWrapped ( OSstream & os,
const std::string & str,
const std::string::size_type width,
const std::string::size_type indent = 0,
const bool escape = false )

Output string with text wrapping.

Always includes a trailing newline, unless the string itself is empty.

Parameters
osThe output stream
strThe text to be output
widthThe max-width before wrapping
indentIndentation for continued lines
escapeEscape any backslashes on output

References Foam::indent(), and os().

Referenced by argList::printMan(), Foam::printManOption(), argList::printNotes(), and Foam::printOptionUsage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ evaluate() [1/2]

string evaluate ( label fieldWidth,
const std::string & s,
size_t pos = 0,
size_t len = std::string::npos )

String evaluation with specified (positive, non-zero) field width.

References Foam::pos(), and s().

Here is the call graph for this function:

◆ evaluate() [2/2]

string evaluate ( const std::string & s,
size_t pos = 0,
size_t len = std::string::npos )

A simple string evaluation that handles various basic expressions. For trivial input, use readScalar instead (faster).

The evaluation supports the following:

  • operations: - + * / %
  • functions: exp, log, log10, pow, sqrt, cbrt, sqr, mag, magSqr
  • trigonometric: sin, cos, tan, asin, acos, atan, atan2, hypot
  • hyperbolic: sinh, cosh, tanh
  • conversions: degToRad, radToDeg
  • type conversion: bool, mag
  • constants: pi(), true, false
  • limits: neg, pos, neg0, pos0, sign, floor, ceil, round
  • other: rand, rand(seed)
  • logic: ! ? : == != <= => < >
Note
Unlike C/C++, the ternary and logical operations are not short-circuiting. So additional guards may be required.
The rand() function returns a uniform scalar on [0-1] interval and uses a constant seed.

References Foam::pos(), and s().

Here is the call graph for this function:

◆ natstrcmp()

int natstrcmp ( const char * s1,
const char * s2 )

'Natural' compare for C-strings

Uses algorithm and code from Jan-Marten Spit jmspi.nosp@m.t@eu.nosp@m.ronet.nosp@m..nl

In the 'natural' comparison, strings are compared alphabetically and numerically. Thus 'file010.txt' sorts after 'file2.txt'

Parameters
s1left string
s2right string
Returns
-1 when s1 < s2, 0 when s1 == s2, 1 when s1 > s2

Referenced by natural_sort::compare().

Here is the caller graph for this function: