lokinet/llarp/util/str.cpp

84 lines
1.6 KiB
C++
Raw Normal View History

#include <util/str.hpp>
2018-10-03 13:00:30 +02:00
2018-12-12 03:17:40 +01:00
#include <algorithm>
2019-07-17 01:27:09 +02:00
#include <cctype>
2018-10-03 13:00:30 +02:00
#include <cstring>
#include <string>
#include <set>
2018-10-03 13:00:30 +02:00
namespace llarp
{
2019-07-02 11:06:29 +02:00
bool
CaselessLessThan::operator()(string_view lhs, string_view rhs) const
{
const size_t s = std::min(lhs.size(), rhs.size());
for(size_t i = 0; i < s; ++i)
{
2019-07-06 19:03:40 +02:00
auto l = std::tolower(lhs[i]);
auto r = std::tolower(rhs[i]);
2019-07-06 19:03:40 +02:00
if(l < r)
{
return true;
}
if(l > r)
{
return false;
}
}
return lhs.size() < rhs.size();
}
bool
IsFalseValue(string_view str)
{
static const std::set< string_view, CaselessLessThan > vals{"no", "false",
"0", "off"};
return vals.count(str) > 0;
2018-10-03 13:00:30 +02:00
}
bool
IsTrueValue(string_view str)
2018-10-03 13:00:30 +02:00
{
static const std::set< string_view, CaselessLessThan > vals{"yes", "true",
"1", "on"};
return vals.count(str) > 0;
2018-10-03 13:00:30 +02:00
}
bool
StrEq(const char* s1, const char* s2)
{
size_t sz1 = strlen(s1);
size_t sz2 = strlen(s2);
if(sz1 == sz2)
{
return strncmp(s1, s2, sz1) == 0;
}
2019-07-06 19:03:40 +02:00
return false;
2018-10-03 13:00:30 +02:00
}
constexpr static char whitespace[] = " \t\n\r\f\v";
string_view
TrimWhitespace(string_view str)
{
size_t begin = str.find_first_not_of(whitespace);
if(begin == string_view::npos)
{
str.remove_prefix(str.size());
return str;
}
str.remove_prefix(begin);
size_t end = str.find_last_not_of(whitespace);
if(end != string_view::npos)
str.remove_suffix(str.size() - end - 1);
return str;
}
2018-10-03 13:00:30 +02:00
} // namespace llarp