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
20[[nodiscard]] bool isNewLine(char c);
21
27[[nodiscard]] bool isNewLine(std::string_view str);
28
34[[nodiscard]] bool isWhitespace(char c);
35
41[[nodiscard]] bool isWhitespace(std::string_view str);
42
48[[nodiscard]] bool isNumber(char c);
49
55[[nodiscard]] bool isNumber(std::string_view str);
56
62[[nodiscard]] bool isAlphaNumeric(char c);
63
69[[nodiscard]] bool isAlphaNumeric(std::string_view str);
70
71[[nodiscard]] bool contains(std::string_view s, char c);
72
81[[nodiscard]] bool matches(std::string_view in, std::string_view search, bool ignoreCase = false);
82
83[[nodiscard]] bool iequals(std::string_view s1, std::string_view s2);
84
85void ltrim(std::string& s);
86
87[[nodiscard]] std::string_view ltrim(std::string_view s);
88
89void rtrim(std::string& s);
90
91[[nodiscard]] std::string_view rtrim(std::string_view s);
92
93void trim(std::string& s);
94
95[[nodiscard]] std::string_view trim(std::string_view s);
96
97void trimInternal(std::string& s);
98
99[[nodiscard]] std::string trimInternal(std::string_view s);
100
101void ltrim(std::string& s, std::string_view chars);
102
103[[nodiscard]] std::string_view ltrim(std::string_view s, std::string_view chars);
104
105void rtrim(std::string& s, std::string_view chars);
106
107[[nodiscard]] std::string_view rtrim(std::string_view s, std::string_view chars);
108
109void trim(std::string& s, std::string_view chars);
110
111[[nodiscard]] std::string_view trim(std::string_view s, std::string_view chars);
112
113void trimInternal(std::string& s, std::string_view chars);
114
115[[nodiscard]] std::string trimInternal(std::string_view s, std::string_view chars);
116
117[[nodiscard]] std::vector<std::string> split(std::string_view s, char delim);
118
119void toLower(std::string& input);
120
121[[nodiscard]] std::string toLower(std::string_view input);
122
123void toUpper(std::string& input);
124
125[[nodiscard]] std::string toUpper(std::string_view input);
126
127[[nodiscard]] std::string createRandom(uint16_t length = 32, std::string_view chars = "0123456789_abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ");
128
129[[nodiscard]] std::string generateUUIDv4();
130
131[[nodiscard]] std::string padNumber(int64_t number, int width);
132
133void normalizeSlashes(std::string& path, bool stripSlashPrefix = false, bool stripSlashSuffix = true);
134
135void denormalizeSlashes(std::string& path, bool stripSlashPrefix = false, bool stripSlashSuffix = true);
136
137bool toBool(std::string_view number, bool& out, int base = 10);
138
139[[nodiscard]] bool isBool(std::string_view number, int base = 10);
140
141bool toInt(std::string_view number, std::integral auto& out, int base = 10) {
142 const auto [ptr, err] = std::from_chars(number.data(), number.data() + number.size(), out, base);
143 return ptr == number.data() + number.size() && err == std::errc{};
144}
145
146template<std::integral T>
147[[nodiscard]] bool isInt(std::string_view number, int base = 10) {
148 T tmp;
149 return toInt(number, tmp, base);
150}
151
152bool toFloat(std::string_view number, std::floating_point auto& out) {
153#ifdef __APPLE__
154 // Piece of shit compiler
155 try {
156 size_t pos = 0;
157 out = std::stof(std::string{number}, &pos);
158 return pos == number.size();
159 } catch (const std::invalid_argument&) {
160 } catch (const std::out_of_range&) {}
161 return false;
162#else
163 const auto [ptr, err] = std::from_chars(number.data(), number.data() + number.size(), out);
164 return ptr == number.data() + number.size() && err == std::errc{};
165#endif
166}
167
168template<std::floating_point T>
169[[nodiscard]] bool isFloat(std::string_view number) {
170 T tmp;
171 return toFloat(number, tmp);
172}
173
174[[nodiscard]] std::vector<std::byte> decodeHex(std::string_view hex);
175
176[[nodiscard]] std::string encodeHex(std::span<const std::byte> hex);
177
178} // namespace sourcepp::string
std::string createRandom(uint16_t length=32, std::string_view chars="0123456789_abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ")
Definition String.cpp:220
std::string padNumber(int64_t number, int width)
Definition String.cpp:256
std::vector< std::byte > decodeHex(std::string_view hex)
Definition String.cpp:292
bool contains(std::string_view s, char c)
Definition String.cpp:55
void normalizeSlashes(std::string &path, bool stripSlashPrefix=false, bool stripSlashSuffix=true)
Definition String.cpp:260
bool isInt(std::string_view number, int base=10)
Definition String.h:147
bool isFloat(std::string_view number)
Definition String.h:169
bool isWhitespace(char c)
If a char is a whitespace character.
Definition String.cpp:31
bool matches(std::string_view in, std::string_view search, bool ignoreCase=false)
A very basic regex-like pattern checker for ASCII strings.
Definition String.cpp:59
void ltrim(std::string &s)
Definition String.cpp:102
bool isNewLine(char c)
If a char is a newline character.
Definition String.cpp:23
bool toBool(std::string_view number, bool &out, int base=10)
Definition String.cpp:280
bool toFloat(std::string_view number, std::floating_point auto &out)
Definition String.h:152
std::vector< std::string > split(std::string_view s, char delim)
Definition String.cpp:190
void denormalizeSlashes(std::string &path, bool stripSlashPrefix=false, bool stripSlashSuffix=true)
Definition String.cpp:270
void trimInternal(std::string &s)
Definition String.cpp:133
bool isBool(std::string_view number, int base=10)
Definition String.cpp:287
bool toInt(std::string_view number, std::integral auto &out, int base=10)
Definition String.h:141
bool isNumber(char c)
If a char is a numerical character (0-9).
Definition String.cpp:39
void rtrim(std::string &s)
Definition String.cpp:113
void toUpper(std::string &input)
Definition String.cpp:210
void trim(std::string &s)
Definition String.cpp:124
bool iequals(std::string_view s1, std::string_view s2)
Definition String.cpp:96
void toLower(std::string &input)
Definition String.cpp:200
std::string generateUUIDv4()
Definition String.cpp:232
std::string encodeHex(std::span< const std::byte > hex)
Definition String.cpp:319
bool isAlphaNumeric(char c)
If a char is a letter (a-z, A-Z) or a numerical character (0-9).
Definition String.cpp:47