16namespace Azure {
namespace Core {
namespace _internal {
22 struct StringExtensions final
24 static constexpr char ToUpper(
char c)
noexcept
26 return (c <
'a' || c >
'z') ? c : c - (
'a' -
'A');
29 static constexpr char ToLower(
char c)
noexcept
31 return (c <
'A' || c >
'Z') ? c : c + (
'a' -
'A');
34 static constexpr bool IsDigit(
char c)
noexcept {
return c >=
'0' && c <=
'9'; }
36 static constexpr bool IsHexDigit(
char c)
noexcept
38 return IsDigit(c) || (c >=
'A' && c <=
'F') || (c >=
'a' && c <=
'f');
41 static constexpr bool IsAlpha(
char c)
noexcept
43 return (c >=
'A' && c <=
'Z') || (c >=
'a' && c <=
'z');
46 static constexpr bool IsAlphaNumeric(
char c)
noexcept {
return IsDigit(c) || IsAlpha(c); }
48 static constexpr bool IsSpace(
char c)
noexcept {
return c ==
' ' || (c >=
'\t' && c <=
'\r'); }
50 static constexpr bool IsPrintable(
char c)
noexcept {
return c >=
' ' && c <=
'~'; }
52 struct CaseInsensitiveComparator final
54 bool operator()(std::string
const& lhs, std::string
const& rhs)
const
56 return std::lexicographical_compare(
57 lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), [](
auto l,
auto r) {
58 return ToLower(l) < ToLower(r);
63 static bool LocaleInvariantCaseInsensitiveEqual(
64 std::string
const& lhs,
65 std::string
const& rhs)
noexcept
67 auto const rhsSize = rhs.size();
68 if (lhs.size() != rhsSize)
73 auto const lhsData = lhs.c_str();
74 auto const rhsData = rhs.c_str();
75 for (
size_t i = 0; i < rhsSize; ++i)
77 if (ToLower(lhsData[i]) != ToLower(rhsData[i]))
86 static std::string ToLower(std::string src)
88 std::transform(src.begin(), src.end(), src.begin(), [](
auto c) { return ToLower(c); });
92 static std::string ToUpper(std::string src)
94 std::transform(src.begin(), src.end(), src.begin(), [](
auto c) { return ToUpper(c); });
98 static std::vector<std::string> Split(
101 bool removeEmptyEntries =
false)
103 std::vector<std::string> result;
105 const auto len = s.size();
109 auto end = s.find(separator, start);
110 if (end == std::string::npos)
114 if (!removeEmptyEntries || start < end)
116 result.push_back(s.substr(start, end - start));
125 static std::string Trim(std::string s)
127 s.erase(s.begin(), std::find_if_not(s.begin(), s.end(), IsSpace));
128 s.erase(std::find_if_not(s.rbegin(), s.rend(), IsSpace).base(), s.end());
Compute the hash value for the input binary data, using SHA256, SHA384 and SHA512.
Definition azure_assert.hpp:57