SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
String.h
Go to the documentation of this file.
1#pragma once
2
3#include <charconv>
4#include <concepts>
5#include <cstddef>
6#include <span>
7#include <string>
8#include <string_view>
9#include <vector>
10
11#include <sourcepp/Math.h>
12
14
15[[nodiscard]] bool contains(std::string_view s, char c);
16
25[[nodiscard]] bool matches(std::string_view in, std::string_view search);
26
27[[nodiscard]] bool iequals(std::string_view s1, std::string_view s2);
28
29void ltrim(std::string& s);
30
31[[nodiscard]] std::string_view ltrim(std::string_view s);
32
33void rtrim(std::string& s);
34
35[[nodiscard]] std::string_view rtrim(std::string_view s);
36
37void trim(std::string& s);
38
39[[nodiscard]] std::string_view trim(std::string_view s);
40
41void trimInternal(std::string& s);
42
43[[nodiscard]] std::string trimInternal(std::string_view s);
44
45void ltrim(std::string& s, std::string_view chars);
46
47[[nodiscard]] std::string_view ltrim(std::string_view s, std::string_view chars);
48
49void rtrim(std::string& s, std::string_view chars);
50
51[[nodiscard]] std::string_view rtrim(std::string_view s, std::string_view chars);
52
53void trim(std::string& s, std::string_view chars);
54
55[[nodiscard]] std::string_view trim(std::string_view s, std::string_view chars);
56
57void trimInternal(std::string& s, std::string_view chars);
58
59[[nodiscard]] std::string trimInternal(std::string_view s, std::string_view chars);
60
61[[nodiscard]] std::vector<std::string> split(std::string_view s, char delim);
62
63void toLower(std::string& input);
64
65[[nodiscard]] std::string toLower(std::string_view input);
66
67void toUpper(std::string& input);
68
69[[nodiscard]] std::string toUpper(std::string_view input);
70
71[[nodiscard]] std::string createRandom(uint16_t length = 32, std::string_view chars = "0123456789_abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ");
72
73[[nodiscard]] std::string generateUUIDv4();
74
75[[nodiscard]] std::string padNumber(int64_t number, int width);
76
77void normalizeSlashes(std::string& path, bool stripSlashPrefix = false, bool stripSlashSuffix = true);
78
79void denormalizeSlashes(std::string& path, bool stripSlashPrefix = false, bool stripSlashSuffix = true);
80
81std::from_chars_result toBool(std::string_view number, bool& out, int base = 10);
82
83std::from_chars_result toInt(std::string_view number, std::integral auto& out, int base = 10) {
84 return std::from_chars(number.data(), number.data() + number.size(), out, base);
85}
86
87std::from_chars_result toFloat(std::string_view number, std::floating_point auto& out) {
88#ifdef __APPLE__
89 // Piece of shit compiler
90 out = std::stof(std::string{number});
91 return {number.data(), {}};
92#else
93 return std::from_chars(number.data(), number.data() + number.size(), out);
94#endif
95}
96
97[[nodiscard]] std::vector<std::byte> decodeHex(std::string_view hex);
98
99[[nodiscard]] std::string encodeHex(std::span<const std::byte> hex);
100
101} // namespace sourcepp::string
std::string createRandom(uint16_t length=32, std::string_view chars="0123456789_abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ")
Definition String.cpp:187
std::string padNumber(int64_t number, int width)
Definition String.cpp:223
std::vector< std::byte > decodeHex(std::string_view hex)
Definition String.cpp:254
std::from_chars_result toFloat(std::string_view number, std::floating_point auto &out)
Definition String.h:87
bool contains(std::string_view s, char c)
Definition String.cpp:22
void normalizeSlashes(std::string &path, bool stripSlashPrefix=false, bool stripSlashSuffix=true)
Definition String.cpp:227
std::from_chars_result toBool(std::string_view number, bool &out, int base=10)
Definition String.cpp:247
void ltrim(std::string &s)
Definition String.cpp:69
std::vector< std::string > split(std::string_view s, char delim)
Definition String.cpp:157
std::from_chars_result toInt(std::string_view number, std::integral auto &out, int base=10)
Definition String.h:83
void denormalizeSlashes(std::string &path, bool stripSlashPrefix=false, bool stripSlashSuffix=true)
Definition String.cpp:237
bool matches(std::string_view in, std::string_view search)
A very basic regex-like pattern checker for ASCII strings.
Definition String.cpp:26
void trimInternal(std::string &s)
Definition String.cpp:100
void rtrim(std::string &s)
Definition String.cpp:80
void toUpper(std::string &input)
Definition String.cpp:177
void trim(std::string &s)
Definition String.cpp:91
bool iequals(std::string_view s1, std::string_view s2)
Definition String.cpp:63
void toLower(std::string &input)
Definition String.cpp:167
std::string generateUUIDv4()
Definition String.cpp:199
std::string encodeHex(std::span< const std::byte > hex)
Definition String.cpp:281