blob: 12e51f8b001d9fe2df3d86d1ecab32d38e263ed9 [file] [log] [blame]
Ed Tanous40e9b922024-09-10 13:50:16 -07001// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright OpenBMC Authors
Ed Tanous50ebd4a2023-01-19 19:03:17 -08003#pragma once
4
Ed Tanous18f8f602023-07-18 10:07:23 -07005#include <algorithm>
6#include <ranges>
Ed Tanous50ebd4a2023-01-19 19:03:17 -08007#include <string>
8#include <string_view>
9#include <vector>
10
11namespace bmcweb
12{
13// This is a naive replacement for boost::split until
14// https://github.com/llvm/llvm-project/issues/40486
15// is resolved
16inline 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;
Ed Tanousb64c6262023-02-21 10:27:14 -080021 while (end <= str.size())
Ed Tanous50ebd4a2023-01-19 19:03:17 -080022 {
23 end = str.find(delim, start);
24 strings.emplace_back(str.substr(start, end - start));
Ed Tanousb64c6262023-02-21 10:27:14 -080025 start = end + 1;
Ed Tanous50ebd4a2023-01-19 19:03:17 -080026 }
27}
Ed Tanous18f8f602023-07-18 10:07:23 -070028
29inline 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
39inline 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
Ed Tanous50ebd4a2023-01-19 19:03:17 -080046} // namespace bmcweb