24 #ifndef MOOSESTRINGUTILS_NO_LIBMESH 25 #include "libmesh/libmesh_common.h" 38 trim(
const std::string & str,
const std::string & white_space =
" \t\n\v\f\r")
40 const auto begin = str.find_first_not_of(white_space);
41 if (begin == std::string::npos)
43 const auto end = str.find_last_not_of(white_space);
44 return str.substr(begin, end - begin + 1);
56 std::vector<T> & elements,
57 unsigned int min_len = 1,
58 const std::string & delims =
"/")
62 std::string::size_type last_pos = str.find_first_not_of(delims, 0);
63 std::string::size_type pos = str.find_first_of(delims,
std::min(last_pos + min_len, str.size()));
65 while (last_pos != std::string::npos)
67 elements.push_back(str.substr(last_pos, pos - last_pos));
69 last_pos = str.find_first_not_of(delims, pos);
70 if (last_pos == std::string::npos)
72 pos = str.find_first_of(delims,
std::min(last_pos + min_len, str.size()));
96 convert(
const std::string & str, T & value,
const bool throw_on_failure)
99 if constexpr (std::is_same_v<short int, T> || std::is_same_v<unsigned short int, T> ||
100 std::is_same_v<int, T> || std::is_same_v<unsigned int, T> ||
101 std::is_same_v<long int, T> || std::is_same_v<unsigned long int, T> ||
102 std::is_same_v<long long int, T> || std::is_same_v<unsigned long long int, T>)
105 long double double_val;
106 std::stringstream double_ss(str);
107 double_ss >> double_val;
109 if (!double_ss.fail() && double_ss.eof())
112 std::stringstream int_ss(str);
113 const bool use_int = !(int_ss >>
value).fail() && int_ss.eof();
116 if (double_val == static_cast<long double>(static_cast<T>(double_val)))
119 value =
static_cast<T
>(double_val);
128 if constexpr (std::is_base_of_v<std::string, T>)
136 std::stringstream ss(
trim(str));
137 if (!(ss >>
value).fail() && ss.eof())
142 if (throw_on_failure)
144 std::string error =
"Unable to convert '" + str +
"' to type ";
145 #ifdef MOOSESTRINGUTILS_NO_LIBMESH 146 error +=
typeid(T).
name();
150 throw std::invalid_argument(error);
160 template <
typename T>
163 std::vector<T> & tokenized_vector,
164 const std::string &
delimiter =
" \t\n\v\f\r")
166 std::vector<std::string> tokens;
168 tokenized_vector.resize(tokens.size());
169 for (std::size_t i = 0; i < tokens.size(); ++i)
170 if (!convert<T>(tokens[i], tokenized_vector[i],
false))
182 std::transform(
name.begin(),
name.end(),
name.begin(), ::toupper);
193 std::transform(
name.begin(),
name.end(),
name.begin(), ::tolower);
std::string name(const ElemQuality q)
void tokenize(const std::string &str, std::vector< T > &elements, unsigned int min_len=1, const std::string &delims="/")
This function will split the passed in string on a set of delimiters appending the substrings to the ...
bool tokenizeAndConvert(const std::string &str, std::vector< T > &tokenized_vector, const std::string &delimiter=" \\\)
tokenizeAndConvert splits a string using delimiter and then converts to type T.
bool convert(const std::string &str, T &value, const bool throw_on_failure)
Takes the string representation of a value and converts it to the value.
std::string toUpper(std::string name)
Convert supplied string to upper case.
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
std::string trim(const std::string &str, const std::string &white_space=" \\\)
Standard scripting language trim function.
std::string toLower(std::string name)
Convert supplied string to lower case.
std::string demangle(const char *name)
auto min(const L &left, const R &right)