7 #ifndef IG_OMW_STRING_H
8 #define IG_OMW_STRING_H
16 #include "../omw/defs.h"
17 #include "../omw/int.h"
18 #include "../omw/vector.h"
26 const char*
const UTF8CP_00C4 =
"\xC3\x84";
29 const char*
const UTF8CP_00D6 =
"\xC3\x96";
30 const char*
const UTF8CP_00DC =
"\xC3\x9C";
31 const char*
const UTF8CP_00E4 =
"\xC3\xA4";
32 const char*
const UTF8CP_00F6 =
"\xC3\xB6";
33 const char*
const UTF8CP_00FC =
"\xC3\xBC";
34 const char*
const UTF8CP_2580 =
"\xE2\x96\x80";
35 const char*
const UTF8CP_2584 =
"\xE2\x96\x84";
36 const char*
const UTF8CP_2588 =
"\xE2\x96\x88";
41 const char*
const UTF8CP_Auml = omw::UTF8CP_00C4;
42 const char*
const UTF8CP_Ouml = omw::UTF8CP_00D6;
43 const char*
const UTF8CP_Uuml = omw::UTF8CP_00DC;
44 const char*
const UTF8CP_auml = omw::UTF8CP_00E4;
45 const char*
const UTF8CP_ouml = omw::UTF8CP_00F6;
46 const char*
const UTF8CP_uuml = omw::UTF8CP_00FC;
49 constexpr
char pairtos_defaultDelimiter =
';';
50 const char*
const hexStrDigitsUpper =
"0123456789ABCDEF";
51 const char*
const hexStrDigitsLower =
"0123456789abcdef";
52 const char*
const hexStrDigits = hexStrDigitsUpper;
53 constexpr
char toHexStr_defaultDelimiter = 0x20;
57 using stdStringVector_t = std::vector<std::string>;
58 constexpr omw::stdStringVector_t::size_type stdStringVector_npos =
static_cast<omw::stdStringVector_t::size_type
>(-1);
61 using stringVector_t = std::vector<omw::string>;
62 constexpr omw::stringVector_t::size_type stringVector_npos =
static_cast<omw::stringVector_t::size_type
>(-1);
88 string(omw::string::size_type count,
char c);
90 string(
const char* str, omw::string::size_type count);
92 string(
const std::string& other, std::string::size_type pos, std::string::size_type count = std::string::npos);
93 string(
const char* first,
const char* last);
99 #ifndef OMWi_DOXYGEN_PREDEFINE
100 #if (OMW_CPPSTD < OMW_CPPSTD_23)
101 bool contains(
char ch)
const {
return (this->find(ch) != omw::string::npos); }
102 bool contains(
const char* str)
const {
return (this->find(str) != omw::string::npos); }
103 #if (OMW_CPPSTD < OMW_CPPSTD_17)
104 bool contains(
const std::string& str)
const {
return (this->find(str) != omw::string::npos); }
106 bool contains(std::string_view sv)
const {
return (this->find(sv) != omw::string::npos); }
109 #else // OMWi_DOXYGEN_PREDEFINE
114 #endif // OMWi_DOXYGEN_PREDEFINE
119 omw::string&
replaceAll(
char search,
char replace, size_type startPos = 0,
size_t* nReplacements =
nullptr);
124 omw::string&
replaceAll(
const std::vector<omw::StringReplacePair>& pairs, size_type startPos = 0,
size_t* nReplacementsTotal =
nullptr, std::vector<size_t>* nReplacements =
nullptr);
127 omw::stringVector_t split(
char delimiter, omw::stringVector_t::size_type maxTokenCount = omw::stringVector_npos)
const;
130 omw::stringVector_t splitLen(omw::string::size_type tokenLength, omw::stringVector_t::size_type maxTokenCount = omw::stringVector_npos)
const;
162 omw::string to_string(
bool value,
bool asText =
true);
165 omw::string to_string(
const std::pair<int32_t, int32_t>& value,
char delimiter = pairtos_defaultDelimiter);
166 omw::string to_string(
const std::pair<uint32_t, uint32_t>& value,
char delimiter = pairtos_defaultDelimiter);
167 omw::string to_string(
const std::pair<int64_t, int64_t>& value,
char delimiter = pairtos_defaultDelimiter);
168 omw::string to_string(
const std::pair<uint64_t, uint64_t>& value,
char delimiter = pairtos_defaultDelimiter);
169 omw::string to_string(
const std::pair<float, float>& value,
char delimiter = pairtos_defaultDelimiter);
170 omw::string to_string(
const std::pair<double, double>& value,
char delimiter = pairtos_defaultDelimiter);
171 omw::string to_string(
const std::pair<long double, long double>& value,
char delimiter = pairtos_defaultDelimiter);
179 std::pair<int32_t, int32_t>
stoipair(
const std::string& str,
char delimiter = pairtos_defaultDelimiter);
204 omw::string toHexStr(int16_t value,
char delimiter);
205 omw::string toHexStr(uint16_t value,
char delimiter);
206 omw::string toHexStr(int32_t value,
char delimiter);
207 omw::string toHexStr(uint32_t value,
char delimiter);
208 omw::string toHexStr(int64_t value,
char delimiter);
209 omw::string toHexStr(uint64_t value,
char delimiter);
211 omw::string toHexStr(
const std::vector<char>& data,
char delimiter = toHexStr_defaultDelimiter);
212 omw::string toHexStr(
const std::vector<uint8_t>& data,
char delimiter = toHexStr_defaultDelimiter);
213 omw::string toHexStr(
const char* data,
size_t count,
char delimiter = toHexStr_defaultDelimiter);
214 omw::string toHexStr(
const uint8_t* data,
size_t count,
char delimiter = toHexStr_defaultDelimiter);
222 std::vector<uint8_t> hexstovector(
const std::string& str,
char delimiter = toHexStr_defaultDelimiter);
237 void rmNonHex(
char* str);
252 omw::string join(
const omw::stringVector_t& strings);
253 omw::string join(
const omw::stringVector_t& strings,
char delimiter);
261 omw::stringVector_t stringVector(
const char*
const* strings,
size_t count);
262 omw::stringVector_t stringVector(
const std::string* strings,
size_t count);
263 omw::stringVector_t stringVector(
const omw::string* strings,
size_t count);
264 omw::stringVector_t stringVector(
const omw::stdStringVector_t& strvec);
266 omw::stdStringVector_t stdStringVector(
const char*
const* strings,
size_t count);
267 omw::stdStringVector_t stdStringVector(
const std::string* strings,
size_t count);
268 omw::stdStringVector_t stdStringVector(
const omw::string* strings,
size_t count);
269 omw::stdStringVector_t stdStringVector(
const omw::stringVector_t& strvec);
280 constexpr
bool isBlank(
char ch) {
return ((ch == 0x09) || (ch == 0x20)); }
281 constexpr
bool isCntrl(
char ch) {
return (((ch >= 0x00) && (ch <= 0x1F)) || (ch == 0x7F)); }
282 constexpr
bool isDigit(
char ch) {
return ((ch >= 0x30) && (ch <= 0x39)); }
283 constexpr
bool isGraph(
char ch) {
return ((ch >= 0x21) && (ch <= 0x7E)); }
284 constexpr
bool isHex(
char ch)
286 return (((ch >= 0x30) && (ch <= 0x39)) || ((ch >= 0x41) && (ch <= 0x46)) ||
287 ((ch >= 0x61) && (ch <= 0x66)));
289 constexpr
bool isLower(
char ch) {
return ((ch >= 0x61) && (ch <= 0x7A)); }
290 constexpr
bool isNull(
char ch) {
return (ch == 0x00); }
291 constexpr
bool isPrint(
char ch) {
return ((ch >= 0x20) && (ch <= 0x7E)); }
292 constexpr
bool isPunct(
char ch)
294 return (((ch >= 0x21) && (ch <= 0x2F)) || ((ch >= 0x3A) && (ch <= 0x40)) ||
295 ((ch >= 0x5B) && (ch <= 0x60)) || ((ch >= 0x7B) && (ch <= 0x7E)));
297 constexpr
bool isSpace(
char ch) {
return (((ch >= 0x09) && (ch <= 0x0D)) || (ch == 0x20)); }
298 constexpr
bool isUpper(
char ch) {
return ((ch >= 0x41) && (ch <= 0x5A)); }
299 constexpr
bool isWhitespace(
char ch) {
return isSpace(ch); }
300 constexpr
bool isAlpha(
char ch) {
return (isLower(ch) || isUpper(ch)); }
301 constexpr
bool isAlnum(
char ch) {
return (isAlpha(ch) || isDigit(ch)); }
315 size_t peekNewLine(
const char* p,
const char* end);
318 omw::string readString(
const std::vector<uint8_t>& data, std::vector<uint8_t>::size_type pos, std::vector<uint8_t>::size_type count);
320 void writeString(std::vector<uint8_t>& buffer, std::vector<uint8_t>::size_type pos,
const std::string& str);
327 #endif // IG_OMW_STRING_H