Anklang 0.3.0-460-gc4ef46ba
ASE — Anklang Sound Engine (C++)

« « « Anklang Documentation
Loading...
Searching...
No Matches
strings.hh
Go to the documentation of this file.
1 // This Source Code Form is licensed MPL-2.0: http://mozilla.org/MPL/2.0
2#ifndef __ASE_STRINGS_HH__
3#define __ASE_STRINGS_HH__
4
5#include <ase/cxxaux.hh>
6#include <ase/formatter.hh>
7#include <cstring> // strerror
8
9namespace Ase {
10typedef std::string String;
11
12#define ASE_STRING_SET_ASCII_ALNUM "0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"
13#define ASE_STRING_SET_LOWER_ALNUM "0123456789" "abcdefghijklmnopqrstuvwxyz"
14
15// == C-String ==
16bool cstring_to_bool (const char *string, bool fallback = false);
17const char* strrstr (const char *haystack, const char *needle);
18const char* string_find_word (const char *haystack, const char *word);
19
20// == String Formatting ==
21String string_vprintf (const char *format, va_list vargs);
22String string_locale_vprintf (const char *format, va_list vargs);
23
24// == String ==
25String string_multiply (const String &s, uint64 count);
26String string_canonify (const String &s, const String &valid_chars, const String &substitute);
28bool string_is_canonified (const String &s, const String &valid_chars);
29const String& string_set_a2z ();
30const String& string_set_A2Z ();
32bool string_is_ascii_alnum (const String &str);
33bool string_islower (const String &str);
34String string_tolower (const String &str);
35bool string_isupper (const String &str);
36String string_toupper (const String &str);
37String string_totitle (const String &str);
38String string_capitalize (const String &str, size_t maxn = size_t (-1), bool rest_tolower = true);
39StringS string_split (const String &string, const String &splitter = "", size_t maxn = size_t (-1));
40StringS string_split_any (const String &string, const String &splitchars = "", size_t maxn = size_t (-1));
41String string_join (const String &junctor, const StringS &strvec);
42bool string_to_bool (const String &string, bool fallback = false);
43String string_from_bool (bool value);
44uint64 string_to_uint (const String &string, size_t *consumed = NULL, uint base = 10);
46bool string_has_int (const String &string);
47int64 string_to_int (const String &string, size_t *consumed = NULL, uint base = 10);
49String string_from_float (float value);
50long double string_to_long_double (const String &string);
51long double string_to_long_double (const char *dblstring, const char **endptr);
52String string_from_long_double (long double value);
53double string_to_double (const String &string);
54double string_to_double (const char *dblstring, const char **endptr);
55String string_from_double (double value);
56inline String string_from_float (double value) { return string_from_double (value); }
57inline double string_to_float (const String &string) { return string_to_double (string); }
60 const String &delim = " ");
61double string_to_seconds (const String &string, double fallback = NAN);
62String string_from_errno (int errno_val);
63bool string_is_uuid (const String &uuid_string); /* check uuid formatting */
64int string_cmp_uuid (const String &uuid_string1,
65 const String &uuid_string2); /* -1=smaller, 0=equal, +1=greater (assuming valid uuid strings) */
66bool string_startswith (const String &string, const String &fragment);
67bool string_startswith (const String &string, const StringS &fragments);
68bool string_endswith (const String &string, const String &fragment);
69bool string_endswith (const String &string, const StringS &fragments);
70bool string_match_identifier (const String &ident1, const String &ident2);
71bool string_match_identifier_tail (const String &ident, const String &tail);
72String string_from_pretty_function_name (const char *cxx_pretty_function);
74String string_to_cquote (const String &str);
75String string_from_cquote (const String &input);
76String string_url_decode (const String &urlstr, bool form_url_encoded = false);
77String string_url_encode (const String &rawstr, bool form_url_encoded = false);
78String string_to_hex (const String &input);
79String string_hexdump (const void *addr, size_t length, size_t initial_offset = 0);
80String string_lstrip (const String &input);
81String string_rstrip (const String &input);
82String string_strip (const String &input);
83String string_replace (const String &input, const String &marker, const String &replacement, size_t maxn = ~size_t (0));
84String string_substitute_char (const String &input, const char match, const char subst);
85void string_vector_lstrip (StringS &svector);
86void string_vector_rstrip (StringS &svector);
87void string_vector_strip (StringS &svector);
89String string_vector_find (const StringS &svector, const String &prefix, const String &fallback = "");
90String string_vector_find_value (const StringS &svector, const String &prefix, const String &fallback = "");
91StringS cstrings_to_vector (const char*, ...) ASE_SENTINEL;
92void memset4 (uint32 *mem, uint32 filler, uint length);
93long double posix_locale_strtold (const char *nptr, char **endptr);
94long double current_locale_strtold (const char *nptr, char **endptr);
95
96StringS strings_version_sort (const StringS &strings, bool reverse = false);
97void strings_version_sort (StringS *strings, bool reverse = false);
98
99// == UTF-8 String Helpers ==
100String string_normalize_nfc (const String &src); // Normalized, composed form UTF-8 string
104String string_casefold (const String &src);
105int string_casecmp (const String &s1, const String &s2); // UTF-8 version of strcasecmp(3)
106int string_cmp (const String &s1, const String &s2); // UTF-8 version of strcmp(3)
107
108// == Templated String Conversions ==
109
111template<typename Type> Type string_to_type (const String &string)
112{ static_assert (!sizeof (Type), "string_to_type<>: unsupported Type"); __builtin_unreachable(); }
113
115template<typename Type> String string_from_type (Type value)
116{ static_assert (!sizeof (Type), "string_from_type<>: unsupported Type"); __builtin_unreachable(); }
117
118// specialisations for templated string conversions
119template<> inline long double string_to_type<long double> (const String &string) { return string_to_long_double (string); }
120template<> inline String string_from_type<long double> (long double value) { return string_from_long_double (value); }
121template<> inline double string_to_type<double> (const String &string) { return string_to_double (string); }
122template<> inline String string_from_type<double> (double value) { return string_from_double (value); }
123template<> inline float string_to_type<float> (const String &string) { return string_to_float (string); }
124template<> inline String string_from_type<float> (float value) { return string_from_float (value); }
125template<> inline bool string_to_type<bool> (const String &string) { return string_to_bool (string); }
126template<> inline String string_from_type<bool> (bool value) { return string_from_bool (value); }
127template<> inline int16 string_to_type<int16> (const String &string) { return string_to_int (string); }
128template<> inline String string_from_type<int16> (int16 value) { return string_from_int (value); }
129template<> inline uint16 string_to_type<uint16> (const String &string) { return string_to_uint (string); }
130template<> inline String string_from_type<uint16> (uint16 value) { return string_from_uint (value); }
131template<> inline int string_to_type<int> (const String &string) { return string_to_int (string); }
132template<> inline String string_from_type<int> (int value) { return string_from_int (value); }
133template<> inline uint string_to_type<uint> (const String &string) { return string_to_uint (string); }
134template<> inline String string_from_type<uint> (uint value) { return string_from_uint (value); }
135template<> inline int64 string_to_type<int64> (const String &string) { return string_to_int (string); }
136template<> inline String string_from_type<int64> (int64 value) { return string_from_int (value); }
137template<> inline uint64 string_to_type<uint64> (const String &string) { return string_to_uint (string); }
138template<> inline String string_from_type<uint64> (uint64 value) { return string_from_uint (value); }
139template<> inline String string_to_type<String> (const String &string) { return string; }
140template<> inline String string_from_type<String> (String value) { return value; }
141
142
143// == String Options ==
144bool string_option_check (const String &optionlist, const String &feature);
145String string_option_find (const String &optionlist, const String &feature, const String &fallback = "");
146std::string_view string_option_find_value (const char *string, const char *feature, const char *fallback, const char *denied, bool matchallnone);
147
148// == Generic Key-Value-Pairs ==
149String kvpair_key (const String &key_value_pair);
150String kvpair_value (const String &key_value_pair);
151String kvpairs_fetch (const StringS &kvs, const String &key, bool casesensitive = true);
152ssize_t kvpairs_search (const StringS &kvs, const String &key, bool casesensitive = true);
153bool kvpairs_assign (StringS &kvs, const String &key_value_pair, bool casesensitive = true);
154
155// == Strings ==
157class Strings : public std::vector<std::string>
158{
159 typedef const std::string CS;
160public:
161 explicit Strings (CS &s1);
162 explicit Strings (CS &s1, CS &s2);
163 explicit Strings (CS &s1, CS &s2, CS &s3);
164 explicit Strings (CS &s1, CS &s2, CS &s3, CS &s4);
165 explicit Strings (CS &s1, CS &s2, CS &s3, CS &s4, CS &s5);
166 explicit Strings (CS &s1, CS &s2, CS &s3, CS &s4, CS &s5, CS &s6);
167 explicit Strings (CS &s1, CS &s2, CS &s3, CS &s4, CS &s5, CS &s6, CS &s7);
168 explicit Strings (CS &s1, CS &s2, CS &s3, CS &s4, CS &s5, CS &s6, CS &s7, CS &s8);
169 explicit Strings (CS &s1, CS &s2, CS &s3, CS &s4, CS &s5, CS &s6, CS &s7, CS &s8, CS &s9);
170 explicit Strings (CS &s1, CS &s2, CS &s3, CS &s4, CS &s5, CS &s6, CS &s7, CS &s8, CS &s9, CS &sA);
171 explicit Strings (CS &s1, CS &s2, CS &s3, CS &s4, CS &s5, CS &s6, CS &s7, CS &s8, CS &s9, CS &sA, CS &sB);
172 explicit Strings (CS &s1, CS &s2, CS &s3, CS &s4, CS &s5, CS &s6, CS &s7, CS &s8, CS &s9, CS &sA, CS &sB, CS &sC);
173};
174
175// == Charset Conversions ==
176bool text_convert (const String &to_charset,
177 String &output_string,
178 const String &from_charset,
179 const String &input_string,
180 const String &fallback_charset = "ISO-8859-15",
181 const String &output_mark = "");
182
183// == C strings ==
184const char* strerror (int errno_num); // POSIX locale
185const char* strerror (); // wrapper for strerror (errno)
186
187// == Implementations ==
188#define ASE_STRING_VECTOR_FROM_ARRAY(ConstCharArray) ({ \
189 Ase::StringS __a; \
190 const Ase::uint64 __l = ASE_ARRAY_SIZE (ConstCharArray); \
191 for (Ase::uint64 __ai = 0; __ai < __l; __ai++) \
192 __a.push_back (ConstCharArray[__ai]); \
193 __a; })
194#define ASE_CQUOTE(str) (Ase::string_to_cquote (str).c_str())
195
196} // Ase
197
198#endif // __ASE_STRINGS_HH__
199
Convenience Constructor for StringSeq or std::vector<std::string>
Definition strings.hh:158
The Anklang C++ API namespace.
Definition api.hh:9
bool string_isupper(const String &str)
Check if all string characters are Unicode upper case characters.
Definition strings.cc:166
String string_to_identifier(const String &input)
Force lower case, alphanumerics + underscore and non-digit start.
Definition strings.cc:54
std::vector< double > string_to_double_vector(const String &string)
Parse a string into a list of doubles, expects ';' as delimiter.
Definition strings.cc:721
int string_cmp(const String &s1, const String &s2)
Like strcmp(3) for UTF-8 strings.
Definition strings.cc:259
String string_from_cquote(const String &input)
Parse a possibly quoted C string into regular string.
Definition strings.cc:1043
String string_from_errno(int errno_val)
Returns a String describing the passed in errno value, similar to strerror().
Definition strings.cc:802
uint64_t uint64
A 64-bit unsigned integer, use PRI*64 in format strings.
Definition cxxaux.hh:25
String string_casefold(const String &src)
Yield UTF-8 string useful for case insensitive comparisons.
Definition strings.cc:249
String string_join(const String &junctor, const StringS &strvec)
Definition strings.cc:452
bool string_is_uuid(const String &uuid_string)
Returns whether uuid_string contains a properly formatted UUID string.
Definition strings.cc:815
String string_totitle(const String &str)
Convert all string characters into Unicode title characters.
Definition strings.cc:176
Type string_to_type(const String &string)
Convert a string to template argument type, such as bool, int, double.
Definition strings.hh:111
String string_vprintf(const char *format, va_list vargs)
Formatted printing ala vprintf() into a String, using the POSIX/C locale.
Definition strings.cc:309
StringS string_split(const String &string, const String &splitter, size_t maxn)
Definition strings.cc:343
String string_hexdump(const void *addr, size_t length, size_t initial_offset)
Definition strings.cc:1184
bool string_is_canonified(const String &string, const String &valid_chars)
Check if string_canonify() would modify string.
Definition strings.cc:90
int16_t int16
A 16-bit signed integer.
Definition cxxaux.hh:27
String string_from_long_double(long double value)
Convert a long double into a string, using the POSIX/C locale.
Definition strings.cc:710
String string_to_hex(const String &input)
Convert bytes in string input to hexadecimal numbers.
Definition strings.cc:1171
String string_from_double(double value)
Convert a double into a string, using the POSIX/C locale.
Definition strings.cc:699
String string_tolower(const String &str)
Convert all string characters into Unicode lower case characters.
Definition strings.cc:136
bool string_match_identifier_tail(const String &ident, const String &tail)
Variant of string_match_identifier() that matches tail against ident at word boundary.
Definition strings.cc:919
String string_lstrip(const String &input)
Strip whitespaces from the left of a string.
Definition strings.cc:1106
bool string_option_check(const String &optionlist, const String &feature)
Check if an option is set/unset in an options list string.
Definition strings.cc:1412
std::vector< String > StringS
Convenience alias for a std::vector<std::string>.
Definition cxxaux.hh:36
int64_t int64
A 64-bit unsigned integer, use PRI*64 in format strings.
Definition cxxaux.hh:29
String string_capitalize(const String &str, size_t maxn, bool rest_tolower)
Capitalize words, so the first letter is upper case, the rest lower case.
Definition strings.cc:186
String string_vector_find_value(const StringS &svector, const String &prefix, const String &fallback)
Definition strings.cc:1252
String string_rstrip(const String &input)
Strip whitespaces from the right of a string.
Definition strings.cc:1116
String string_toupper(const String &str)
Convert all string characters into Unicode upper case characters.
Definition strings.cc:156
String string_normalize_nfd(const String &src)
Yield normalized decomposed UTF-8 string.
Definition strings.cc:219
int string_cmp_uuid(const String &uuid_string1, const String &uuid_string2)
Returns whether uuid_string1 compares smaller (-1), equal (0) or greater (+1) to uuid_string2.
Definition strings.cc:839
int string_casecmp(const String &s1, const String &s2)
Like strcasecmp(3) for UTF-8 strings.
Definition strings.cc:266
String string_from_int(int64 value)
Convert a 64bit signed integer into a string.
Definition strings.cc:604
String string_from_uint(uint64 value)
Convert a 64bit unsigned integer into a string.
Definition strings.cc:561
const char * string_find_word(const char *haystack, const char *word)
Find occurance of word in haystack.
Definition strings.cc:520
String string_from_double_vector(const std::vector< double > &dvec, const String &delim)
Construct a string out of all double values passed in dvec, separated by delim.
Definition strings.cc:759
void string_vector_erase_empty(StringS &svector)
Remove empty elements from a string vector.
Definition strings.cc:414
long double posix_locale_strtold(const char *nptr, char **endptr)
Parse a double from a string ala strtod(), trying locale specific characters and POSIX/C formatting.
Definition strings.cc:626
String string_from_pretty_function_name(const char *cxx_pretty_function)
Definition strings.cc:934
double string_to_seconds(const String &string, double fallback)
Parse string into seconds.
Definition strings.cc:773
StringS cstrings_to_vector(const char *s,...)
Construct a StringS from a NULL terminated list of string arguments.
Definition strings.cc:1265
const String & string_set_ascii_alnum()
Returns a string containing all of 0-9, A-Z and a-z.
Definition strings.cc:118
long double string_to_long_double(const String &string)
Parse a long double from a string, trying locale specific characters and POSIX/C formatting.
Definition strings.cc:660
int64 string_to_int(const String &string, size_t *consumed, uint base)
Parse a string into a 64bit integer, optionally specifying the expected number base.
Definition strings.cc:578
String string_replace(const String &input, const String &marker, const String &replacement, size_t maxn)
Replace substring marker in input with replacement, at most maxn times.
Definition strings.cc:1144
StringS string_split_any(const String &string, const String &splitchars, size_t maxn)
Definition strings.cc:365
String string_normalize_nfkc(const String &src)
Formatting stripped normalized composed UTF-8 string.
Definition strings.cc:229
void string_vector_strip(StringS &svector)
Strip all elements of a string vector, see string_strip().
Definition strings.cc:442
String string_url_decode(const String &urlstr, const bool form_url_encoded)
Decode URL %-sequences in a string, decode '+' if form_url_encoded.
Definition strings.cc:965
String string_option_find(const String &optionlist, const String &feature, const String &fallback)
Retrieve the option value from an options list separated by ':' or ';' or fallback.
Definition strings.cc:1404
uint64 string_to_uint(const String &string, size_t *consumed, uint base)
Parse a string into a 64bit unsigned integer, optionally specifying the expected number base.
Definition strings.cc:540
double string_to_double(const String &string)
Parse a double from a string, trying locale specific characters and POSIX/C formatting.
Definition strings.cc:674
uint16_t uint16
A 16-bit unsigned integer.
Definition cxxaux.hh:23
const String & string_set_a2z()
Returns a string containing all of a-z.
Definition strings.cc:102
bool string_has_int(const String &string)
Checks if a string contains a digit, optionally preceeded by whitespaces.
Definition strings.cc:568
String string_normalize_nfkd(const String &src)
Formatting stripped normalized decomposed UTF-8 string.
Definition strings.cc:239
String string_normalize_nfc(const String &src)
Yield normalized composed UTF-8 string.
Definition strings.cc:209
std::string String
Convenience alias for std::string.
Definition cxxaux.hh:35
String string_vector_find(const StringS &svector, const String &prefix, const String &fallback)
Definition strings.cc:1235
bool string_to_bool(const String &string, bool fallback)
Definition strings.cc:467
void string_vector_rstrip(StringS &svector)
Right-strip all elements of a string vector, see string_rstrip().
Definition strings.cc:434
String string_multiply(const String &s, uint64 count)
Reproduce a string s for count times.
Definition strings.cc:31
long double current_locale_strtold(const char *nptr, char **endptr)
Parse a double from a string ala strtod(), trying locale specific characters and POSIX/C formatting.
Definition strings.cc:638
String string_canonify(const String &string, const String &valid_chars, const String &substitute)
Definition strings.cc:68
String string_strip(const String &input)
Strip whitespaces from the left and right of a string.
Definition strings.cc:1126
const String & string_set_A2Z()
Returns a string containing all of A-Z.
Definition strings.cc:110
String string_from_bool(bool value)
Convert a boolean value into a string.
Definition strings.cc:533
uint32_t uint32
A 32-bit unsigned integer.
Definition cxxaux.hh:24
uint32_t uint
Provide 'uint' as convenience type.
Definition cxxaux.hh:18
String string_url_encode(const String &rawstr, const bool form_url_encoded)
Encode special characters to URL %-sequences, encode space as '+' if form_url_encoded.
Definition strings.cc:989
bool string_endswith(const String &string, const String &fragment)
Returns whether string ends with fragment.
Definition strings.cc:863
String string_substitute_char(const String &input, const char match, const char subst)
Replace all occouranes of match in input with subst.
Definition strings.cc:1159
bool string_islower(const String &str)
Check if all string characters are Unicode lower case characters.
Definition strings.cc:146
bool string_match_identifier(const String &ident1, const String &ident2)
Check equality of strings canonicalized to "[0-9a-z_]+".
Definition strings.cc:926
bool text_convert(const String &to_charset, String &output_string, const String &from_charset, const String &input_string, const String &fallback_charset, const String &output_mark)
Definition strings.cc:1573
String string_to_cquote(const String &str)
Returns a string as C string including double quotes.
Definition strings.cc:1036
std::string_view string_option_find_value(const char *string, const char *feature, const char *fallback, const char *denied, bool matchallnone)
Low level option search, avoids dynamic allocations.
Definition strings.cc:1397
String string_from_float(float value)
Convert a float into a string, using the POSIX/C locale.
Definition strings.cc:688
String string_from_type(Type value)
Create a string from a templated argument value, such as bool, int, double.
Definition strings.hh:115
void string_vector_lstrip(StringS &svector)
Left-strip all elements of a string vector, see string_lstrip().
Definition strings.cc:426
void memset4(uint32 *mem, uint32 filler, uint length)
Fill a memory area with a 32-bit quantitiy.
Definition strings.cc:1221
String string_to_cescape(const String &str)
Definition strings.cc:1011
String string_locale_vprintf(const char *format, va_list vargs)
Formatted printing like string_vprintf using the current locale.
Definition strings.cc:316
bool string_startswith(const String &string, const String &fragment)
Returns whether string starts with fragment.
Definition strings.cc:846
strerror
typedef ssize_t