annotate include/core/strings.h @ 187:9613d72b097e

*: multiple performance improvements like marking `static const` when it makes sense... date: change old stupid heap-based method to a structure which should make copying the thing actually make a copy. also many performance-based changes, like removing the std::tie dependency and forward-declaring nlohmann json *: replace every instance of QString::fromUtf8 to Strings::ToQString. the main difference is that our function will always convert exactly what is in the string, while some other times it would only convert up to the nearest NUL byte
author Paper <mrpapersonic@gmail.com>
date Wed, 06 Dec 2023 13:43:54 -0500
parents bc8d2ccff09c
children 7cf53145de11
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1 #ifndef __core__strings_h
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2 #define __core__strings_h
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 10
diff changeset
3
9
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4 #include <string>
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5 #include <vector>
105
6d8da6e64d61 theme: add dark stylesheet, make it actually usable
Paper <mrpapersonic@gmail.com>
parents: 102
diff changeset
6 #include <array>
122
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
7 #include <limits>
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
8 #include <stdexcept>
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 105
diff changeset
9 #include <cstdint>
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 10
diff changeset
10
64
fe719c109dbc *: update
Paper <mrpapersonic@gmail.com>
parents: 62
diff changeset
11 class QString;
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
12 class QByteArray;
64
fe719c109dbc *: update
Paper <mrpapersonic@gmail.com>
parents: 62
diff changeset
13
10
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
14 namespace Strings {
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 10
diff changeset
15
9
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16 /* Implode function: takes a vector of strings and turns it
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17 into a string, separated by delimiters. */
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18 std::string Implode(const std::vector<std::string>& vector, const std::string& delimiter);
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 116
diff changeset
19 std::vector<std::string> Split(const std::string &text, const std::string& delimiter);
9
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21 /* Substring removal functions */
98
582b2fca1561 strings: parse HTML entities when reading synopsis, make the
Paper <mrpapersonic@gmail.com>
parents: 85
diff changeset
22 std::string ReplaceAll(std::string string, const std::string& find, const std::string& replace);
9
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23 std::string SanitizeLineEndings(const std::string& string);
100
f5940a575d83 track/constants: add many more video formats
Paper <mrpapersonic@gmail.com>
parents: 98
diff changeset
24 std::string RemoveHtmlTags(std::string string);
f5940a575d83 track/constants: add many more video formats
Paper <mrpapersonic@gmail.com>
parents: 98
diff changeset
25 std::string ParseHtmlEntities(std::string string);
9
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
26
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
27 /* stupid HTML bullshit */
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
28 std::string TextifySynopsis(const std::string& string);
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 10
diff changeset
29
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 10
diff changeset
30 std::string ToUpper(const std::string& string);
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 10
diff changeset
31 std::string ToLower(const std::string& string);
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 10
diff changeset
32
98
582b2fca1561 strings: parse HTML entities when reading synopsis, make the
Paper <mrpapersonic@gmail.com>
parents: 85
diff changeset
33 /* functions that make the way we convert from and to
582b2fca1561 strings: parse HTML entities when reading synopsis, make the
Paper <mrpapersonic@gmail.com>
parents: 85
diff changeset
34 different string formats universal */
62
4c6dd5999b39 *: update
Paper <mrpapersonic@gmail.com>
parents: 36
diff changeset
35 std::wstring ToWstring(const std::string& string);
64
fe719c109dbc *: update
Paper <mrpapersonic@gmail.com>
parents: 62
diff changeset
36 std::wstring ToWstring(const QString& string);
62
4c6dd5999b39 *: update
Paper <mrpapersonic@gmail.com>
parents: 36
diff changeset
37 std::string ToUtf8String(const std::wstring& wstring);
64
fe719c109dbc *: update
Paper <mrpapersonic@gmail.com>
parents: 62
diff changeset
38 std::string ToUtf8String(const QString& string);
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
39 std::string ToUtf8String(const QByteArray& ba);
64
fe719c109dbc *: update
Paper <mrpapersonic@gmail.com>
parents: 62
diff changeset
40 QString ToQString(const std::string& string);
fe719c109dbc *: update
Paper <mrpapersonic@gmail.com>
parents: 62
diff changeset
41 QString ToQString(const std::wstring& wstring);
62
4c6dd5999b39 *: update
Paper <mrpapersonic@gmail.com>
parents: 36
diff changeset
42
101
c537996cf67b *: multitude of config changes
Paper <mrpapersonic@gmail.com>
parents: 100
diff changeset
43 /* arithmetic :) */
122
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
44 template<typename T = int>
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
45 T ToInt(const std::string& str, T def = 0) {
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
46 auto clamp = [](const T& val, const T& min, const T& max){
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
47 return std::max(min, std::min(val, max));
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
48 };
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
49
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
50 try {
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
51 if constexpr (std::is_signed<T>::value) {
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
52 return clamp(std::stoll(str), std::numeric_limits<T>::min(), std::numeric_limits<T>::max());
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
53 } else if constexpr (std::is_unsigned<T>::value) {
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
54 return clamp(std::stoull(str), std::numeric_limits<T>::max(), std::numeric_limits<T>::max());
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
55 } else {
178
bc8d2ccff09c win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents: 122
diff changeset
56 throw std::invalid_argument("Invalid input to Strings::ToInt()!");
122
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
57 }
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
58 } catch (std::invalid_argument const& ex) {
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
59 return def;
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
60 }
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
61 }
101
c537996cf67b *: multitude of config changes
Paper <mrpapersonic@gmail.com>
parents: 100
diff changeset
62
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
63 bool ToBool(const std::string& s, const bool def = false);
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
64 std::string ToUtf8String(const bool b);
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
65
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 105
diff changeset
66 uint64_t HumanReadableSizeToBytes(const std::string& str);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 105
diff changeset
67
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 105
diff changeset
68 std::string RemoveLeadingChars(std::string s, const char c);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 105
diff changeset
69 std::string RemoveTrailingChars(std::string s, const char c);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 105
diff changeset
70
102
b315f3759c56 *: big patch
Paper <mrpapersonic@gmail.com>
parents: 101
diff changeset
71 bool BeginningMatchesSubstring(const std::string& str, const std::string& sub);
b315f3759c56 *: big patch
Paper <mrpapersonic@gmail.com>
parents: 101
diff changeset
72
85
c69230dc2b5d *: cleanup includes
Paper <mrpapersonic@gmail.com>
parents: 64
diff changeset
73 }; // namespace Strings
c69230dc2b5d *: cleanup includes
Paper <mrpapersonic@gmail.com>
parents: 64
diff changeset
74
9
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
75 #endif // __core__strings_h