DDraceNetwork Documentation
Loading...
Searching...
No Matches
str.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3
4#ifndef BASE_STR_H
5#define BASE_STR_H
6
7#include <cinttypes>
8#include <cstdarg>
9#include <cstddef>
10#include <cstdint>
11#include <cstring>
12
18
19#ifdef __MINGW32__
20#undef PRId64
21#undef PRIu64
22#undef PRIX64
23#define PRId64 "I64d"
24#define PRIu64 "I64u"
25#define PRIX64 "I64X"
26#define PRIzu "Iu"
27#else
28#define PRIzu "zu"
29#endif
30
45int str_copy(char *dst, const char *src, int dst_size);
46
58template<int N>
59void str_copy(char (&dst)[N], const char *src)
60{
61 str_copy(dst, src, N);
62}
63
76void str_append(char *dst, const char *src, int dst_size);
77
89template<int N>
90void str_append(char (&dst)[N], const char *src)
91{
92 str_append(dst, src, N);
93}
94
109void str_truncate(char *dst, int dst_size, const char *src, int truncation_len);
110
120int str_length(const char *str);
121
138[[gnu::format(printf, 3, 0)]] int str_format_v(char *buffer, int buffer_size, const char *format, va_list args);
139
156[[gnu::format(printf, 3, 4)]] int str_format(char *buffer, int buffer_size, const char *format, ...);
157
158#if !defined(CONF_DEBUG)
159int str_format_int(char *buffer, size_t buffer_size, int value);
160
161template<typename... Args>
162int str_format_opt(char *buffer, int buffer_size, const char *format, Args... args)
163{
164 static_assert(sizeof...(args) > 0, "Use str_copy instead of str_format without format arguments");
165 return str_format(buffer, buffer_size, format, args...);
166}
167
168template<>
169inline int str_format_opt(char *buffer, int buffer_size, const char *format, int val) // NOLINT(readability-inconsistent-declaration-parameter-name)
170{
171 if(strcmp(format, "%d") == 0)
172 {
173 return str_format_int(buffer, buffer_size, val);
174 }
175 else
176 {
177 return str_format(buffer, buffer_size, format, val);
178 }
179}
180
181#define str_format str_format_opt
182#endif
183
184char str_uppercase(char c);
185
186bool str_isnum(char c);
187
188int str_isallnum(const char *str);
189
190int str_isallnum_hex(const char *str);
191
203int str_isspace(char c);
204
218const char *str_trim_words(const char *str, int words);
219
231bool str_has_cc(const char *str);
232
242void str_sanitize_cc(char *str);
243
254void str_sanitize(char *str);
255
262void str_sanitize_filename(char *str);
263
273bool str_valid_filename(const char *str);
274
289int str_comp_filenames(const char *a, const char *b);
290
300void str_clean_whitespaces(char *str);
301
315char *str_skip_to_whitespace(char *str);
316
322const char *str_skip_to_whitespace_const(const char *str);
323
337char *str_skip_whitespaces(char *str);
338
344const char *str_skip_whitespaces_const(const char *str);
345
361int str_comp_nocase(const char *a, const char *b);
362
380int str_comp_nocase_num(const char *a, const char *b, int num);
381
396int str_comp(const char *a, const char *b);
397
413int str_comp_num(const char *a, const char *b, int num);
414
428const char *str_startswith_nocase(const char *str, const char *prefix);
429
443const char *str_startswith(const char *str, const char *prefix);
444
458const char *str_endswith_nocase(const char *str, const char *suffix);
459
471const char *str_endswith(const char *str, const char *suffix);
472
488const char *str_find_nocase(const char *haystack, const char *needle);
489
503const char *str_find(const char *haystack, const char *needle);
504
519const char *str_next_token(const char *str, const char *delim, char *buffer, int buffer_size);
520
533int str_in_list(const char *list, const char *delim, const char *needle);
534
549bool str_delimiters_around_offset(const char *haystack, const char *delim, int offset, int *start, int *end);
550
565const char *str_rchr(const char *haystack, char needle);
566
581int str_countchr(const char *haystack, char needle);
582
595void str_hex(char *dst, int dst_size, const void *data, int data_size);
596
613void str_hex_cstyle(char *dst, int dst_size, const void *data, int data_size, int bytes_per_line = 12);
614
630int str_hex_decode(void *dst, int dst_size, const char *src);
631
644void str_base64(char *dst, int dst_size, const void *data, int data_size);
645
661int str_base64_decode(void *dst, int dst_size, const char *data);
662
670void str_escape(char **dst, const char *src, const char *end);
671
672int str_toint(const char *str);
673bool str_toint(const char *str, int *out);
674int str_toint_base(const char *str, int base);
675unsigned long str_toulong_base(const char *str, int base);
676int64_t str_toint64_base(const char *str, int base = 10);
677float str_tofloat(const char *str);
678bool str_tofloat(const char *str, float *out);
679
680unsigned str_quickhash(const char *str);
681
694int str_utf8_encode(char *ptr, int chr);
695
709int str_utf8_decode(const char **ptr);
710
724void str_utf8_truncate(char *dst, int dst_size, const char *src, int truncation_len);
725
737int str_utf8_fix_truncation(char *str);
738
749void str_utf8_trim_right(char *param);
750
764void str_utf8_tolower(const char *input, char *output, size_t size);
765
775int str_utf8_isspace(int code);
776
786int str_utf8_isstart(char c);
787
801int str_utf8_rewind(const char *str, int cursor);
802
819const char *str_utf8_find_nocase(const char *haystack, const char *needle, const char **end = nullptr);
820
833int str_utf8_comp_nocase(const char *a, const char *b);
834
848int str_utf8_comp_nocase_num(const char *a, const char *b, int num);
849
860const char *str_utf8_skip_whitespaces(const char *str);
861
875int str_utf8_forward(const char *str, int cursor);
876
888int str_utf8_check(const char *str);
889
903void str_utf8_copy_num(char *dst, const char *src, int dst_size, int num);
904
919void str_utf8_stats(const char *str, size_t max_size, size_t max_count, size_t *size, size_t *count);
920
934size_t str_utf8_offset_bytes_to_chars(const char *str, size_t byte_offset);
935
949size_t str_utf8_offset_chars_to_bytes(const char *str, size_t char_offset);
950
961int str_utf8_dist(const char *a, const char *b);
962
979int str_utf8_dist_buffer(const char *a, const char *b, int *buf, int buf_len);
980
999int str_utf32_dist_buffer(const int *a, int a_len, const int *b, int b_len, int *buf, int buf_len);
1000
1001int str_utf8_to_skeleton(const char *str, int *buf, int buf_len);
1002
1013int str_utf8_comp_confusable(const char *str1, const char *str2);
1014
1024int str_utf8_tolower_codepoint(int code);
1025
1026#endif
const char * str_rchr(const char *haystack, char needle)
Definition str.cpp:564
void str_utf8_trim_right(char *param)
Definition str.cpp:1053
void str_hex_cstyle(char *dst, int dst_size, const void *data, int data_size, int bytes_per_line=12)
Definition str.cpp:596
int str_utf8_tolower_codepoint(int code)
Definition tolower.cpp:3
int str_utf8_comp_nocase(const char *a, const char *b)
Definition str.cpp:1152
char * str_skip_to_whitespace(char *str)
Definition str.cpp:326
size_t str_utf8_offset_chars_to_bytes(const char *str, size_t char_offset)
Definition str.cpp:1288
void str_utf8_copy_num(char *dst, const char *src, int dst_size, int num)
Definition str.cpp:1235
int str_length(const char *str)
Definition str.cpp:52
int str_utf8_forward(const char *str, int cursor)
Definition str.cpp:1212
const char * str_next_token(const char *str, const char *delim, char *buffer, int buffer_size)
Definition str.cpp:501
int str_utf8_decode(const char **ptr)
Definition str.cpp:952
void str_sanitize(char *str)
Definition str.cpp:171
const char * str_find_nocase(const char *haystack, const char *needle)
Definition str.cpp:449
const char * str_startswith(const char *str, const char *prefix)
Definition str.cpp:396
void str_base64(char *dst, int dst_size, const void *data, int data_size)
Definition str.cpp:688
int str_utf8_encode(char *ptr, int chr)
Definition str.cpp:907
int str_utf8_isstart(char c)
Definition str.cpp:1107
bool str_has_cc(const char *str)
Definition str.cpp:144
int str_utf32_dist_buffer(const int *a, int a_len, const int *b, int b_len, int *buf, int buf_len)
Definition str.cpp:1341
void str_sanitize_cc(char *str)
Definition str.cpp:159
const char * str_skip_whitespaces_const(const char *str)
Definition str.cpp:347
const char * str_skip_to_whitespace_const(const char *str)
Definition str.cpp:333
const char * str_utf8_skip_whitespaces(const char *str)
Definition str.cpp:1192
int str_format_v(char *buffer, int buffer_size, const char *format, va_list args)
Definition str.cpp:57
int str_comp_num(const char *a, const char *b, int num)
Definition str.cpp:378
bool str_delimiters_around_offset(const char *haystack, const char *delim, int offset, int *start, int *end)
Definition str.cpp:532
int str_utf8_comp_confusable(const char *str1, const char *str2)
Definition confusables.cpp:83
int str_base64_decode(void *dst, int dst_size, const char *data)
Definition str.cpp:765
void str_utf8_truncate(char *dst, int dst_size, const char *src, int truncation_len)
Definition str.cpp:1019
void str_utf8_stats(const char *str, size_t max_size, size_t max_count, size_t *size, size_t *count)
Definition str.cpp:1253
int str_hex_decode(void *dst, int dst_size, const char *src)
Definition str.cpp:671
int str_comp_filenames(const char *a, const char *b)
Definition str.cpp:263
void str_hex(char *dst, int dst_size, const void *data, int data_size)
Definition str.cpp:581
void str_utf8_tolower(const char *input, char *output, size_t size)
Definition str.cpp:1078
int str_comp_nocase(const char *a, const char *b)
Definition str.cpp:355
void str_truncate(char *dst, int dst_size, const char *src, int truncation_len)
Definition str.cpp:42
size_t str_utf8_offset_bytes_to_chars(const char *str, size_t byte_offset)
Definition str.cpp:1273
int str_countchr(const char *haystack, char needle)
Definition str.cpp:569
int str_comp(const char *a, const char *b)
Definition str.cpp:373
void str_append(char *dst, const char *src, int dst_size)
Definition str.cpp:25
int str_utf8_check(const char *str)
Definition str.cpp:1222
const char * str_utf8_find_nocase(const char *haystack, const char *needle, const char **end=nullptr)
Definition str.cpp:1125
void str_clean_whitespaces(char *str)
Definition str.cpp:295
int str_utf8_isspace(int code)
Definition str.cpp:1096
const char * str_startswith_nocase(const char *str, const char *prefix)
Definition str.cpp:383
int str_utf8_comp_nocase_num(const char *a, const char *b, int num)
Definition str.cpp:1168
const char * str_endswith_nocase(const char *str, const char *suffix)
Definition str.cpp:409
int str_copy(char *dst, const char *src, int dst_size)
Definition str.cpp:18
char * str_skip_whitespaces(char *str)
Definition str.cpp:340
int str_utf8_rewind(const char *str, int cursor)
Definition str.cpp:1114
int str_utf8_fix_truncation(char *str)
Definition str.cpp:1036
const char * str_find(const char *haystack, const char *needle)
Definition str.cpp:468
int str_comp_nocase_num(const char *a, const char *b, int num)
Definition str.cpp:364
int str_utf8_dist_buffer(const char *a, const char *b, int *buf, int buf_len)
Definition str.cpp:1321
int str_isspace(char c)
Definition str.cpp:126
const char * str_trim_words(const char *str, int words)
Definition str.cpp:131
int str_isallnum(const char *str)
Definition str.cpp:104
unsigned long str_toulong_base(const char *str, int base)
Definition str.cpp:872
int str_utf8_dist(const char *a, const char *b)
Definition str.cpp:1301
int str_toint_base(const char *str, int base)
Definition str.cpp:867
void str_escape(char **dst, const char *src, const char *end)
Definition str.cpp:834
void str_sanitize_filename(char *str)
Definition str.cpp:182
int str_in_list(const char *list, const char *delim, const char *needle)
Definition str.cpp:518
int str_format_int(char *buffer, size_t buffer_size, int value)
Definition str.cpp:70
int str_toint(const char *str)
Definition str.cpp:850
int str_format_opt(char *buffer, int buffer_size, const char *format, Args... args)
Definition str.h:162
bool str_isnum(char c)
Definition str.cpp:99
float str_tofloat(const char *str)
Definition str.cpp:882
unsigned str_quickhash(const char *str)
Definition str.cpp:899
#define str_format
Definition str.h:181
int str_isallnum_hex(const char *str)
Definition str.cpp:115
const char * str_endswith(const char *str, const char *suffix)
Definition str.cpp:429
char str_uppercase(char c)
Definition str.cpp:92
int64_t str_toint64_base(const char *str, int base=10)
Definition str.cpp:877
bool str_valid_filename(const char *str)
Definition str.cpp:196
int str_utf8_to_skeleton(const char *str, int *buf, int buf_len)
Definition confusables.cpp:66