annotate include/core/strings.h @ 169:e44b7c428d7c

dep/animia: add libkvm method (UNTESTED)
author Paper <mrpapersonic@gmail.com>
date Sun, 19 Nov 2023 17:30:38 -0500
parents bc218c9d2ea6
children bc8d2ccff09c
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 {
bc218c9d2ea6 strings: convert ToInt() to be a template
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
56 throw std::invalid_argument("it no worky");
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