7 #ifndef IG_OMW_STRING_H
8 #define IG_OMW_STRING_H
14 #include "../omw/defs.h"
17 #define OMWi_STRING_IMPLEMENT_CONTAINS (1)
18 #if defined(_MSVC_LANG)
19 #if (_MSVC_LANG > 202002L)
20 #undef OMWi_STRING_IMPLEMENT_CONTAINS
22 #elif defined(__cplusplus)
23 #if (__cplusplus > 202100L)
24 #undef OMWi_STRING_IMPLEMENT_CONTAINS
35 const char*
const UTF8CP_00C4 =
"\xC3\x84";
38 const char*
const UTF8CP_00D6 =
"\xC3\x96";
39 const char*
const UTF8CP_00DC =
"\xC3\x9C";
40 const char*
const UTF8CP_00E4 =
"\xC3\xA4";
41 const char*
const UTF8CP_00F6 =
"\xC3\xB6";
42 const char*
const UTF8CP_00FC =
"\xC3\xBC";
43 const char*
const UTF8CP_2580 =
"\xE2\x96\x80";
44 const char*
const UTF8CP_2584 =
"\xE2\x96\x84";
45 const char*
const UTF8CP_2588 =
"\xE2\x96\x88";
50 const char*
const UTF8CP_Auml = omw::UTF8CP_00C4;
51 const char*
const UTF8CP_Ouml = omw::UTF8CP_00D6;
52 const char*
const UTF8CP_Uuml = omw::UTF8CP_00DC;
53 const char*
const UTF8CP_auml = omw::UTF8CP_00E4;
54 const char*
const UTF8CP_ouml = omw::UTF8CP_00F6;
55 const char*
const UTF8CP_uuml = omw::UTF8CP_00FC;
58 constexpr
char pairtos_defaultSepChar =
';';
59 const char*
const hexStrDigitsUpper =
"0123456789ABCDEF";
60 const char*
const hexStrDigitsLower =
"0123456789abcdef";
61 const char*
const hexStrDigits = hexStrDigitsUpper;
62 constexpr
char toHexStr_defaultSepChar = 0x20;
66 using stdStringVector_t = std::vector<std::string>;
67 using stdStringVector_size_type = omw::stdStringVector_t::size_type;
68 constexpr stdStringVector_size_type stdStringVector_npos = (omw::stdStringVector_size_type)-1;
71 using stringVector_t = std::vector<omw::string>;
72 using stringVector_size_type = omw::stringVector_t::size_type;
73 constexpr stringVector_size_type stringVector_npos = (omw::stringVector_size_type)-1;
99 string(std::string::size_type count,
char c);
101 string(
const char* str, std::string::size_type count);
102 string(
const std::string& other, std::string::size_type pos = 0, std::string::size_type count = std::string::npos);
103 string(
const char* first,
const char* last);
106 #ifdef OMWi_STRING_IMPLEMENT_CONTAINS
107 bool contains(
char ch)
const;
108 bool contains(
const char* str)
const;
115 omw::string&
replaceAll(
char search,
char replace, size_type startPos = 0,
size_t* nReplacements =
nullptr);
120 omw::string&
replaceAll(
const std::vector<omw::StringReplacePair>& pairs, size_type startPos = 0,
size_t* nReplacementsTotal =
nullptr, std::vector<size_t>* nReplacements =
nullptr);
123 omw::stringVector_t split(omw::string::size_type tokenLength, omw::stringVector_size_type maxTokenCount = omw::stringVector_npos)
const;
159 omw::string to_string(
bool value,
bool asText =
true);
160 omw::string to_string(
const std::pair<int32_t, int32_t>& value,
char sepChar = pairtos_defaultSepChar);
161 omw::string to_string(
const std::pair<uint32_t, uint32_t>& value,
char sepChar = pairtos_defaultSepChar);
162 omw::string to_string(
const std::pair<int64_t, int64_t>& value,
char sepChar = pairtos_defaultSepChar);
163 omw::string to_string(
const std::pair<uint64_t, uint64_t>& value,
char sepChar = pairtos_defaultSepChar);
164 omw::string to_string(
const std::pair<float, float>& value,
char sepChar = pairtos_defaultSepChar);
165 omw::string to_string(
const std::pair<double, double>& value,
char sepChar = pairtos_defaultSepChar);
166 omw::string to_string(
const std::pair<long double, long double>& value,
char sepChar = pairtos_defaultSepChar);
171 std::pair<int32_t, int32_t>
stoipair(
const std::string& str,
char sepChar = pairtos_defaultSepChar);
192 omw::string toHexStr(uint16_t value,
char sepChar);
194 omw::string toHexStr(uint32_t value,
char sepChar);
196 omw::string toHexStr(uint64_t value,
char sepChar);
197 omw::string toHexStr(
const std::vector<char>& data,
char sepChar = toHexStr_defaultSepChar);
198 omw::string toHexStr(
const std::vector<uint8_t>& data,
char sepChar = toHexStr_defaultSepChar);
199 omw::string toHexStr(
const char* data,
size_t count,
char sepChar = toHexStr_defaultSepChar);
200 omw::string toHexStr(
const uint8_t* data,
size_t count,
char sepChar = toHexStr_defaultSepChar);
206 std::vector<uint8_t> hexstovector(
const std::string& str,
char sepChar = toHexStr_defaultSepChar);
223 void rmNonHex(
char* str);
238 omw::string join(
const omw::stringVector_t& strings);
239 omw::string join(
const omw::stringVector_t& strings,
char sepChar);
247 omw::stringVector_t stringVector(
const char*
const* strings,
size_t count);
248 omw::stringVector_t stringVector(
const std::string* strings,
size_t count);
249 omw::stringVector_t stringVector(
const omw::string* strings,
size_t count);
250 omw::stringVector_t stringVector(
const omw::stdStringVector_t& strvec);
252 omw::stdStringVector_t stdStringVector(
const char*
const* strings,
size_t count);
253 omw::stdStringVector_t stdStringVector(
const std::string* strings,
size_t count);
254 omw::stdStringVector_t stdStringVector(
const omw::string* strings,
size_t count);
255 omw::stdStringVector_t stdStringVector(
const omw::stringVector_t& strvec);
266 constexpr
bool isBlank(
char ch) {
return ((ch == 0x09) || (ch == 0x20)); }
267 constexpr
bool isCntrl(
char ch) {
return (((ch >= 0x00) && (ch <= 0x1F)) || (ch == 0x7F)); }
268 constexpr
bool isDigit(
char ch) {
return ((ch >= 0x30) && (ch <= 0x39)); }
269 constexpr
bool isGraph(
char ch) {
return ((ch >= 0x21) && (ch <= 0x7E)); }
270 constexpr
bool isHex(
char ch)
272 return (((ch >= 0x30) && (ch <= 0x39)) || ((ch >= 0x41) && (ch <= 0x46)) ||
273 ((ch >= 0x61) && (ch <= 0x66)));
275 constexpr
bool isLower(
char ch) {
return ((ch >= 0x61) && (ch <= 0x7A)); }
276 constexpr
bool isNull(
char ch) {
return (ch == 0x00); }
277 constexpr
bool isPrint(
char ch) {
return ((ch >= 0x20) && (ch <= 0x7E)); }
278 constexpr
bool isPunct(
char ch)
280 return (((ch >= 0x21) && (ch <= 0x2F)) || ((ch >= 0x3A) && (ch <= 0x40)) ||
281 ((ch >= 0x5B) && (ch <= 0x60)) || ((ch >= 0x7B) && (ch <= 0x7E)));
283 constexpr
bool isSpace(
char ch) {
return (((ch >= 0x09) && (ch <= 0x0D)) || (ch == 0x20)); }
284 constexpr
bool isUpper(
char ch) {
return ((ch >= 0x41) && (ch <= 0x5A)); }
285 constexpr
bool isWhitespace(
char ch) {
return isSpace(ch); }
286 constexpr
bool isAlpha(
char ch) {
return (isLower(ch) || isUpper(ch)); }
287 constexpr
bool isAlnum(
char ch) {
return (isAlpha(ch) || isDigit(ch)); }
301 size_t peekNewLine(
const char* p,
const char* end);
308 #endif // IG_OMW_STRING_H