Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
strings.hpp
Go to the documentation of this file.
1#ifndef IV_SRC_CORE_STRINGS_HPP_
2#define IV_SRC_CORE_STRINGS_HPP_
3
4#include "core/exception.hpp"
5
6#include <algorithm>
7#include <array>
8#include <iomanip>
9#include <string>
10#include <vector>
11
12namespace iv::strings
13{
14
15void replaceSubString(std::string &source, const std::string &strToSearch, const std::string &strToReplace);
16
23template<typename StringType>
24 void toUpper(StringType &str)
25 requires(std::is_convertible_v<StringType, std::string> ||
26 std::is_same_v<std::remove_pointer_t<std::decay_t<StringType>>, char> ||
27 (std::is_same_v<std::decay_t<StringType>, std::string> &&
28 std::is_same_v<typename std::decay_t<StringType>::value_type, char>) ||
29 (std::is_same_v<std::decay_t<StringType>, std::vector<char>>) ||
30 (std::is_same_v<std::decay_t<StringType>,
31 std::array<char, std::tuple_size_v<std::decay_t<StringType>>>>) )
32{
33 std::transform(str.begin(), str.end(), str.begin(), [](const unsigned char c) { return std::toupper(c); });
34}
35
43template<typename StringType>
44 void toLower(StringType &str)
45 requires(std::is_convertible_v<StringType, std::string> ||
46 std::is_same_v<std::remove_pointer_t<std::decay_t<StringType>>, char> ||
47 (std::is_same_v<std::decay_t<StringType>, std::string> &&
48 std::is_same_v<typename std::decay_t<StringType>::value_type, char>) ||
49 (std::is_same_v<std::decay_t<StringType>, std::vector<char>>) ||
50 (std::is_same_v<std::decay_t<StringType>,
51 std::array<char, std::tuple_size_v<std::decay_t<StringType>>>>) )
52{
53 std::transform(str.begin(), str.end(), str.begin(), [](const unsigned char c) { return std::tolower(c); });
54}
55
56std::string utf8ToAscii(const std::string &utf8str);
57
62void trim(std::string &str);
63
68void ltrim(std::string &str);
69
74void rtrim(std::string &str);
75
81uint32_t toU32bit(std::string_view str);
82
88uint16_t toUint16(std::string_view str);
89
95std::vector<std::string> parseAlgorithmName(std::string_view in);
96
108std::string fromBool(bool value, std::string_view trueString = "On", std::string_view falseString = "Off");
109
123template<typename T>
124std::string bytesToHex(const T &data, const bool reverseOption = false)
125 requires std::ranges::sized_range<T> || std::is_array_v<T>
126{
127 if constexpr (not std::ranges::sized_range<T> && not std::is_array_v<T>)
128 {
129 throw iv::exception::InvalidArgument("Input must be a sized range or array.");
130 }
131
132 size_t length {0};
133
134 if constexpr (std::ranges::sized_range<T>)
135 {
136 length = std::size(data);
137 }
138 else if constexpr (std::is_array_v<T>)
139 {
140 length = std::extent_v<T>;
141 }
142
143 if (length == 0)
144 {
145 throw std::invalid_argument("Input range or array is empty.");
146 }
147
148 std::ostringstream oss;
149
150 for (size_t i = 0; i < length; i++)
151 {
152 size_t index = reverseOption ? length - 1 - i : i;
153 const auto value = static_cast<unsigned char>(data[index]);
154 oss << std::setw(2) << std::setfill('0') << std::hex << std::uppercase << static_cast<int32_t>(value);
155
156 if (i != length - 1)
157 {
158 oss << "-";
159 }
160 }
161
162 return oss.str();
163}
164
165// Specialization for void*
166std::string bytesToHex(const void *data, size_t length, bool reverseOption = false);
167
168}// namespace iv::strings
169
170#endif//IV_SRC_CORE_STRINGS_HPP_
Definition strings.cpp:7
std::vector< std::string > parseAlgorithmName(const std::string_view in)
Definition strings.cpp:96
std::string utf8ToAscii(const std::string &utf8str)
Definition strings.cpp:18
std::string bytesToHex(const void *data, const size_t length, const bool reverseOption)
Definition strings.cpp:176
uint16_t toUint16(const std::string_view in)
Definition strings.cpp:81
void rtrim(std::string &str)
Trims right whites.
Definition strings.cpp:48
void replaceSubString(std::string &source, const std::string &strToSearch, const std::string &strToReplace)
Definition strings.cpp:9
uint32_t toU32bit(const std::string_view in)
Definition strings.cpp:54
void toLower(StringType &str)
Convert the given text's characters into lowercase ones.
Definition strings.hpp:44
void toUpper(StringType &str)
Convert the given text's characters into uppercase ones.
Definition strings.hpp:24
void ltrim(std::string &str)
Trims left whites.
Definition strings.cpp:43
void trim(std::string &str)
Trims left and right whites.
Definition strings.cpp:37
std::string fromBool(const bool value, const std::string_view trueString, const std::string_view falseString)
Converts a boolean value to a string representation.
Definition strings.cpp:171