Mercurial > minori
comparison src/core/strings.cc @ 365:f81bed4e04ac
*: megacommit that probably breaks things
| author | Paper <paper@paper.us.eu.org> |
|---|---|
| date | Wed, 02 Oct 2024 23:06:43 -0400 |
| parents | a0aa8c8c4307 |
| children | 47c9f8502269 |
comparison
equal
deleted
inserted
replaced
| 364:99c961c91809 | 365:f81bed4e04ac |
|---|---|
| 80 } | 80 } |
| 81 | 81 |
| 82 /* this also performs case folding, so our string is lowercase after this */ | 82 /* this also performs case folding, so our string is lowercase after this */ |
| 83 void NormalizeUnicode(std::string& string) { | 83 void NormalizeUnicode(std::string& string) { |
| 84 static constexpr utf8proc_option_t options = static_cast<utf8proc_option_t>( | 84 static constexpr utf8proc_option_t options = static_cast<utf8proc_option_t>( |
| 85 UTF8PROC_COMPAT | UTF8PROC_COMPOSE | UTF8PROC_STABLE | | 85 UTF8PROC_COMPAT | UTF8PROC_COMPOSE | UTF8PROC_STABLE | |
| 86 UTF8PROC_IGNORE | UTF8PROC_STRIPCC | UTF8PROC_STRIPMARK | | 86 UTF8PROC_IGNORE | UTF8PROC_STRIPCC | UTF8PROC_STRIPMARK | |
| 87 UTF8PROC_LUMP | UTF8PROC_CASEFOLD | UTF8PROC_NLF2LS | 87 UTF8PROC_LUMP | UTF8PROC_CASEFOLD | UTF8PROC_NLF2LS |
| 88 ); | 88 ); |
| 89 | 89 |
| 90 /* ack */ | 90 /* ack */ |
| 91 utf8proc_uint8_t* buf = nullptr; | 91 utf8proc_uint8_t* buf = nullptr; |
| 92 | 92 |
| 95 string.size(), | 95 string.size(), |
| 96 &buf, | 96 &buf, |
| 97 options | 97 options |
| 98 ); | 98 ); |
| 99 | 99 |
| 100 if (size) | 100 if (buf) { |
| 101 string = std::string(reinterpret_cast<const char*>(buf), size); | 101 if (size) |
| 102 | 102 string.assign(reinterpret_cast<const char*>(buf), size); |
| 103 if (buf) | 103 |
| 104 free(buf); | 104 std::free(buf); |
| 105 } | |
| 105 } | 106 } |
| 106 | 107 |
| 107 void NormalizeAnimeTitle(std::string& string) { | 108 void NormalizeAnimeTitle(std::string& string) { |
| 108 ConvertRomanNumerals(string); | 109 ConvertRomanNumerals(string); |
| 109 NormalizeUnicode(string); | 110 NormalizeUnicode(string); |
| 188 std::istringstream s(Strings::ToLower(str)); | 189 std::istringstream s(Strings::ToLower(str)); |
| 189 s >> std::boolalpha >> def; | 190 s >> std::boolalpha >> def; |
| 190 return def; | 191 return def; |
| 191 } | 192 } |
| 192 | 193 |
| 194 template<typename T> | |
| 195 constexpr T ipow(T num, unsigned int pow) { | |
| 196 return (pow >= sizeof(unsigned int)*8) ? 0 : | |
| 197 pow == 0 ? 1 : num * ipow(num, pow-1); | |
| 198 } | |
| 199 | |
| 193 /* util funcs */ | 200 /* util funcs */ |
| 194 uint64_t HumanReadableSizeToBytes(const std::string& str) { | 201 uint64_t HumanReadableSizeToBytes(const std::string& str) { |
| 195 static const std::unordered_map<std::string, uint64_t> bytes_map = { | 202 static const std::unordered_map<std::string, uint64_t> bytes_map = { |
| 196 {"KB", 1000ull}, | 203 {"KB", 1e3}, |
| 197 {"MB", 1000000ull}, | 204 {"MB", 1e6}, |
| 198 {"GB", 1000000000ull}, | 205 {"GB", 1e9}, |
| 199 {"TB", 1000000000000ull}, | 206 {"TB", 1e12}, |
| 200 {"PB", 1000000000000000ull}, | 207 {"PB", 1e15}, |
| 201 {"KiB", 1ull << 10}, | 208 {"KiB", 1ull << 10}, |
| 202 {"MiB", 1ull << 20}, | 209 {"MiB", 1ull << 20}, |
| 203 {"GiB", 1ull << 30}, | 210 {"GiB", 1ull << 30}, |
| 204 {"TiB", 1ull << 40}, | 211 {"TiB", 1ull << 40}, |
| 205 {"PiB", 1ull << 50} /* surely we won't need more than this */ | 212 {"PiB", 1ull << 50} /* surely we won't need more than this */ |
