summaryrefslogtreecommitdiffstats
path: root/src/core/utils/string.cc
blob: 154b04b0eab259399c117ee982758daa5f70a179 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// SPDX-License-Identifier: BSD-2-Clause
// Copyright (c) 2025 Kirill Dmitrievich
// File: string.cc
// Description: String utilities

#include "core/pch.hh"

#include "core/utils/string.hh"

constexpr static const char* WHITESPACE_CHARS = " \t\r\n";

bool utils::is_whitespace(const std::string& string)
{
    if(string.find_first_not_of(WHITESPACE_CHARS) == std::string::npos) {
        return true;
    }
    else if((string.size() == 1) && string[0] == 0x00) {
        return true;
    }
    else {
        return string.empty();
    }
}

std::string utils::join(const std::vector<std::string>& strings, const std::string& separator)
{
    std::ostringstream stream;
    for(const std::string& str : strings)
        stream << str << separator;
    return stream.str();
}

std::vector<std::string> utils::split(const std::string& string, const std::string& separator)
{
    std::size_t pos = 0;
    std::size_t prev = 0;
    std::vector<std::string> result;

    while((pos = string.find(separator, prev)) != std::string::npos) {
        result.push_back(string.substr(prev, pos - prev));
        prev = pos + separator.length();
    }

    if(prev <= string.length()) {
        result.push_back(string.substr(prev, string.length() - prev));
    }

    return result;
}

std::string utils::trim_whitespace(const std::string& string)
{
    auto su = string.find_first_not_of(WHITESPACE_CHARS);
    auto sv = string.find_last_not_of(WHITESPACE_CHARS);

    if(su == std::string::npos) {
        return std::string();
    }
    else {
        return string.substr(su, sv - su + 1);
    }
}