xref: /openbmc/bmcweb/include/str_utility.hpp (revision 40e9b92ec19acffb46f83a6e55b18974da5d708e)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3 #pragma once
4 
5 #include <algorithm>
6 #include <ranges>
7 #include <string>
8 #include <string_view>
9 #include <vector>
10 
11 namespace bmcweb
12 {
13 // This is a naive replacement for boost::split until
14 // https://github.com/llvm/llvm-project/issues/40486
15 // is resolved
16 inline void split(std::vector<std::string>& strings, std::string_view str,
17                   char delim)
18 {
19     size_t start = 0;
20     size_t end = 0;
21     while (end <= str.size())
22     {
23         end = str.find(delim, start);
24         strings.emplace_back(str.substr(start, end - start));
25         start = end + 1;
26     }
27 }
28 
29 inline char asciiToLower(char c)
30 {
31     // Converts a character to lower case without relying on std::locale
32     if ('A' <= c && c <= 'Z')
33     {
34         c -= ('A' - 'a');
35     }
36     return c;
37 }
38 
39 inline bool asciiIEquals(std::string_view left, std::string_view right)
40 {
41     return std::ranges::equal(left, right, [](char lChar, char rChar) {
42         return asciiToLower(lChar) == asciiToLower(rChar);
43     });
44 }
45 
46 } // namespace bmcweb
47