15#define strncasecmp _strnicmp
16#define strcasecmp _stricmp
22#define SIZET_FMT "%zu"
27std::string
format_money(
double cents,
bool showCents =
true);
31const char *
pi_strcasestr(
const char *haystack,
const char *needle);
33inline bool starts_with(
const std::string_view s,
const std::string_view t)
35 if (s.size() < t.size())
37 return std::memcmp(s.data(), t.data(), t.size()) == 0;
40inline bool ends_with(
const std::string_view s,
const std::string_view t)
42 if (s.size() < t.size())
45 return std::memcmp(s.data() + (s.size() - t.size()), t.data(), t.size()) == 0;
48inline bool starts_with_ci(
const std::string_view s,
const std::string_view t)
50 if (s.size() < t.size())
53 for (
size_t i = 0; i < t.size(); i++)
54 if (tolower(s.data()[i]) != tolower(t.data()[i]))
60inline bool ends_with_ci(
const std::string_view s,
const std::string_view t)
62 if (s.size() < t.size())
65 for (int64_t i = t.size(); i > 0; i--)
66 if (tolower(s.data()[s.size() - i]) != tolower(t.data()[t.size() - i]))
72inline bool compare_ci(
const std::string_view s,
const std::string_view t)
74 if (s.size() != t.size())
77 for (
size_t i = 0; i < s.size(); i++)
78 if (tolower(s.data()[i]) != tolower(t.data()[i]))
84inline std::string_view
read_line(std::string_view &s)
89 std::string_view out = s;
91 size_t end = s.find_first_of(
"\r\n");
92 if (end == std::string_view::npos) {
97 out = { s.data(), end };
99 size_t start = s.find_first_not_of(
"\r\n", end);
100 if (start == std::string_view::npos) {
105 s.remove_prefix(start);
114 size_t start = s.find_first_not_of(
" \t\r\n\v");
115 if (start == std::string::npos)
118 size_t end = s.find_last_not_of(
" \t\r\n\v");
120 return s.substr(start, end);
131 iter() : m_parent(nullptr), m_str() {};
135 m_str(parent->m_orig),
136 m_next(parent->step(m_str))
142 if (m_next != std::string_view::npos)
143 return m_parent->m_reverse ? m_str.substr(m_next + 1) : m_str.substr(0, m_next);
150 m_parent->trim(m_str, m_next);
151 m_next = m_parent->step(m_str);
157 return (m_str.empty() && rhs.m_str.empty()) ||
158 (m_parent == rhs.m_parent && m_str.size() == rhs.m_str.size());
163 std::string_view m_str;
164 size_t m_next = std::string_view::npos;
168 m_orig(source), m_delim(delim)
171 SplitString(std::string_view source, std::string_view delim,
bool reverse) :
172 m_orig(source), m_delim(delim), m_reverse(reverse)
179 template<
typename T = std::
string_view>
182 for (
auto str : *
this) {
183 out.push_back(T(str));
190 template<
typename Container,
typename Predicate>
192 for (
auto str : *
this) {
201 size_t step(std::string_view str);
203 void trim(std::string_view &str,
size_t next);
205 std::string_view m_orig;
206 std::string_view m_delim;
207 bool m_reverse =
false;
225void StrToAuto(
float *pVal,
const std::string &str);
226void StrToAuto(
double *pVal,
const std::string &str);
double val
Definition: PrecalcPath.cpp:40
float StrToFloat(const std::string &str)
Definition: StringUtils.cpp:274
bool compare_ci(const std::string_view s, const std::string_view t)
Definition: StringUtils.h:72
std::string format_date_only(double time)
Definition: StringUtils.cpp:81
bool ends_with(const std::string_view s, const std::string_view t)
Definition: StringUtils.h:40
uint64_t StrToUInt64(const std::string &str)
Definition: StringUtils.cpp:267
std::string AutoToStr(int32_t val)
bool starts_with(const std::string_view s, const std::string_view t)
Definition: StringUtils.h:33
bool ends_with_ci(const std::string_view s, const std::string_view t)
Definition: StringUtils.h:60
int64_t StrToSInt64(const std::string &str)
Definition: StringUtils.cpp:260
std::string_view read_line(std::string_view &s)
Definition: StringUtils.h:84
std::string format_money(double cents, bool showCents=true)
Definition: StringUtils.cpp:15
std::string FloatToStr(float val)
Definition: StringUtils.cpp:206
bool starts_with_ci(const std::string_view s, const std::string_view t)
Definition: StringUtils.h:48
std::string format_date(double time)
Definition: StringUtils.cpp:68
std::string format_duration(double seconds)
Definition: StringUtils.cpp:105
void StrToAuto(int32_t *pVal, const std::string &str)
std::string_view strip_spaces(std::string_view &s)
Definition: StringUtils.h:109
std::string format_distance(double dist, int precision=2)
Definition: StringUtils.cpp:129
const char * pi_strcasestr(const char *haystack, const char *needle)
Definition: StringUtils.cpp:157
double StrToDouble(const std::string &str)
Definition: StringUtils.cpp:291
std::string DoubleToStr(double val)
Definition: StringUtils.cpp:221
std::string DecimalToDegMinSec(float dec)
Definition: StringUtils.cpp:333
Definition: StringUtils.h:126
iter & operator++()
Definition: StringUtils.h:148
iter(SplitString *parent)
Definition: StringUtils.h:133
bool operator==(const iter &rhs)
Definition: StringUtils.h:156
iter()
Definition: StringUtils.h:131
bool operator!=(const iter &rhs)
Definition: StringUtils.h:155
std::string_view value_type
Definition: StringUtils.h:127
std::string_view reference
Definition: StringUtils.h:128
value_type operator*()
Definition: StringUtils.h:140
Definition: StringUtils.h:125
iter begin()
Definition: StringUtils.h:175
SplitString(std::string_view source, std::string_view delim)
Definition: StringUtils.h:167
void to_vector(Container &c, Predicate p)
Definition: StringUtils.h:191
std::vector< T > to_vector()
Definition: StringUtils.h:180
iter end()
Definition: StringUtils.h:176
SplitString(std::string_view source, std::string_view delim, bool reverse)
Definition: StringUtils.h:171