1 #include "string_utils.h" 12 auto front = std::find_if(str.begin(), str.end(), [](
int c) {
return !std::isspace(c); });
13 return std::string(front, str.end());
18 auto back = std::find_if(str.rbegin(), str.rend(), [](
int c) {
return !std::isspace(c); }).base();
19 return std::string(str.begin(), back);
22 std::string
trim(
const std::string &str)
24 auto front = std::find_if(str.begin(), str.end(), [](
int c) {
return !std::isspace(c); });
25 auto back = std::find_if(str.rbegin(), str.rend(), [](
int c) {
return !std::isspace(c); }).base();
30 return std::string(front, back);
33 bool find_needle(
const std::string &haystack,
const std::string &needle)
35 return (haystack.find(needle) == std::string::npos ?
false :
true);
38 bool starts_with(
const std::string &str,
const std::string &search_str)
40 size_t search_str_length = search_str.length();
42 if (search_str_length > str.length()) {
46 for (
size_t i = 0; i < search_str_length; ++i) {
47 if (str[i] != search_str[i]) {
55 bool ends_with(
const std::string &str,
const std::string &search_str)
57 size_t search_str_length = search_str.length();
58 size_t str_length = str.length();
60 if (search_str_length > str.length()) {
64 for (
size_t i = 0; i < search_str_length; ++i) {
65 if (str[str_length - i - 1] != search_str[search_str_length - i - 1]) {
73 std::vector<std::string>
split(
const std::string &str,
char delim)
75 std::vector<std::string> result;
76 std::stringstream stream(str);
79 while (std::getline(stream, item, delim)) {
80 result.push_back(item);
92 if (value ==
"0" || value ==
"f" || value ==
"n" || value ==
"off" || value ==
"no" ||
93 value ==
"disabled") {
95 }
else if (value ==
"1" || value ==
"t" || value ==
"y" || value ==
"on" || value ==
"yes" ||
100 "Option '" + option_name +
"' parsing failed: String '" + value +
"' is not valid boolean type.");
112 return std::stod(value);
113 }
catch (std::exception &e) {
121 std::string binary_prefix =
"0b";
122 if (std::equal(binary_prefix.begin(), binary_prefix.end(), value.begin())) {
124 return std::stoll(value.substr(2), 0, 2);
127 return std::stoll(value, 0, 0);
129 }
catch (std::exception &e) {
138 std::string binary_prefix =
"0b";
139 if (std::equal(binary_prefix.begin(), binary_prefix.end(), value.begin())) {
141 return std::stoull(value.substr(2), 0, 2);
144 return std::stoull(value, 0, 0);
146 }
catch (std::exception &e) {
156 return static_cast<std::string
>(value);
float_ini_t parse_string< float_ini_t >(const std::string &value, const std::string &option_name)
std::string trim(const std::string &str)
signed_ini_t parse_string< signed_ini_t >(const std::string &value, const std::string &option_name)
std::string right_trim(const std::string &str)
bool starts_with(const std::string &str, const std::string &search_str)
string_ini_t parse_string< string_ini_t >(const std::string &value, const std::string &)
bool ends_with(const std::string &str, const std::string &search_str)
std::string to_string(const enum_ini_t &value)
unsigned_ini_t parse_string< unsigned_ini_t >(const std::string &value, const std::string &option_name)
std::vector< std::string > split(const std::string &str, char delim)
enum_ini_t parse_string< enum_ini_t >(const std::string &value, const std::string &option_name)
boolean_ini_t parse_string< boolean_ini_t >(const std::string &value, const std::string &option_name)
bool find_needle(const std::string &haystack, const std::string &needle)
std::string left_trim(const std::string &str)