Rudiments
wcharstring.h
1 // Copyright (c) 1999-2018 David Muse
2 // See the COPYING file for more information.
3 
4 #ifndef RUDIMENTS_WCHARSTRING_H
5 #define RUDIMENTS_WCHARSTRING_H
6 
7 #include <rudiments/private/wcharstringincludes.h>
8 
17 class RUDIMENTS_DLLSPEC wcharstring {
18  public:
19 
21  static size_t length(const wchar_t *string);
22 
25  static size_t size(const wchar_t *string);
26 
28  static bool isNullOrEmpty(const wchar_t *string);
29 
37  static bool isYes(const wchar_t *string);
38 
45  static bool isNo(const wchar_t *string);
46 
48  static void zero(wchar_t *str, size_t len);
49 
53  static wchar_t *append(wchar_t *dest, const wchar_t *source);
54 
58  static wchar_t *append(wchar_t *dest, const wchar_t *source,
59  size_t size);
60 
64  static wchar_t *append(wchar_t *dest, int64_t number);
65 
69  static wchar_t *append(wchar_t *dest, uint64_t number);
70 
74  static wchar_t *append(wchar_t *dest, double number);
75 
80  static wchar_t *append(wchar_t *dest, double number,
81  uint16_t scale);
82 
87  static wchar_t *append(wchar_t *dest, double number,
88  uint16_t precision,
89  uint16_t scale);
90 
94  static wchar_t *copy(wchar_t *dest, const wchar_t *source);
95 
99  static wchar_t *copy(wchar_t *dest,
100  const wchar_t *source, size_t size);
101 
106  static wchar_t *copy(wchar_t *dest, size_t location,
107  const wchar_t *source);
108 
113  static wchar_t *copy(wchar_t *dest, size_t location,
114  const wchar_t *source, size_t size);
115 
120  static wchar_t *safeCopy(wchar_t *dest, size_t destlen,
121  const wchar_t *source);
122 
127  static wchar_t *safeCopy(wchar_t *dest,
128  size_t destlen,
129  const wchar_t *source,
130  size_t sourcesize);
131 
134  static int32_t compare(const wchar_t *str1,
135  const wchar_t *str2);
136 
139  static int32_t compare(const wchar_t *str1,
140  const wchar_t *str2,
141  size_t size);
142 
145  static int32_t compareIgnoringCase(const wchar_t *str1,
146  const wchar_t *str2);
147 
151  static int32_t compareIgnoringCase(const wchar_t *str1,
152  const wchar_t *str2,
153  size_t size);
154 
159  static bool inSet(const wchar_t *str,
160  const wchar_t * const *set);
161 
166  static bool inSetIgnoringCase(const wchar_t *str,
167  const wchar_t * const *set);
168 
171  static bool contains(const wchar_t *haystack,
172  const wchar_t *needle);
173 
176  static bool containsIgnoringCase(const wchar_t *haystack,
177  const wchar_t *needle);
178 
181  static bool contains(const wchar_t *haystack,
182  wchar_t needle);
183 
186  static bool containsIgnoringCase(const wchar_t *haystack,
187  wchar_t needle);
188 
191  static bool startsWith(const wchar_t *haystack,
192  const wchar_t *needle);
193 
196  static bool endsWith(const wchar_t *haystack,
197  const wchar_t *needle);
198 
201  static const wchar_t *findFirst(const wchar_t *haystack,
202  const wchar_t *needle);
203 
206  static const wchar_t *findFirstIgnoringCase(
207  const wchar_t *haystack,
208  const wchar_t *needle);
209 
212  static const wchar_t *findFirst(const wchar_t *haystack,
213  wchar_t needle);
214 
217  static const wchar_t *findFirstIgnoringCase(
218  const wchar_t *haystack,
219  wchar_t needle);
220 
224  static const wchar_t *findFirstOrEnd(const wchar_t *haystack,
225  const wchar_t *needle);
226 
230  static const wchar_t *findFirstOrEndIgnoringCase(
231  const wchar_t *haystack,
232  const wchar_t *needle);
233 
237  static const wchar_t *findFirstOrEnd(const wchar_t *haystack,
238  wchar_t needle);
239 
243  static const wchar_t *findFirstOrEndIgnoringCase(
244  const wchar_t *haystack,
245  wchar_t needle);
246 
249  static const wchar_t *findLast(const wchar_t *haystack,
250  const wchar_t *needle);
251 
254  static const wchar_t *findLast(const wchar_t *haystack,
255  wchar_t needle);
256 
259  static wchar_t *findFirst(wchar_t *haystack,
260  const wchar_t *needle);
261 
264  static wchar_t *findFirstIgnoringCase(wchar_t *haystack,
265  const wchar_t *needle);
266 
269  static wchar_t *findFirst(wchar_t *haystack, wchar_t needle);
270 
273  static wchar_t *findFirstIgnoringCase(wchar_t *haystack,
274  wchar_t needle);
275 
279  static wchar_t *findFirstOrEnd(wchar_t *haystack,
280  const wchar_t *needle);
281 
285  static wchar_t *findFirstOrEndIgnoringCase(wchar_t *haystack,
286  const wchar_t *needle);
287 
290  static wchar_t *findLast(wchar_t *haystack,
291  const wchar_t *needle);
292 
295  static const wchar_t *findLastIgnoringCase(
296  const wchar_t *haystack,
297  const wchar_t *needle);
298 
301  static wchar_t *findLast(wchar_t *haystack, wchar_t needle);
302 
305  static const wchar_t *findLastIgnoringCase(
306  const wchar_t *haystack,
307  wchar_t needle);
308 
312  static const wchar_t *findFirstOfSet(const wchar_t *haystack,
313  const wchar_t *set);
314 
318  static wchar_t *findFirstOfSet(wchar_t *haystack,
319  const wchar_t *set);
320 
325  static const wchar_t *findFirstOfSetOrEnd(
326  const wchar_t *haystack,
327  const wchar_t *set);
328 
333  static wchar_t *findFirstOfSetOrEnd(
334  wchar_t *haystack,
335  const wchar_t *set);
336 
340  static const wchar_t *findLastOfSet(const wchar_t *haystack,
341  const wchar_t *set);
342 
346  static wchar_t *findLastOfSet(wchar_t *haystack,
347  const wchar_t *set);
348 
353  static const wchar_t *findLastOfSetOrEnd(
354  const wchar_t *haystack,
355  const wchar_t *set);
356 
361  static wchar_t *findLastOfSetOrEnd(
362  wchar_t *haystack,
363  const wchar_t *set);
364 
369  static wchar_t *before(const wchar_t *str,
370  const wchar_t *delimiter);
371 
376  static wchar_t *between(const wchar_t *str,
377  const wchar_t *start,
378  const wchar_t *end);
379 
385  static wchar_t *after(const wchar_t *str,
386  const wchar_t *delimiter);
387 
391  static size_t lengthContainingSet(const wchar_t *haystack,
392  const wchar_t *set);
393 
397  static size_t lengthNotContainingSet(const wchar_t *haystack,
398  const wchar_t *set);
399 
404  static wchar_t *duplicate(const wchar_t *str);
405 
411  static wchar_t *duplicate(const char *str, size_t len);
412 
418  static wchar_t *duplicate(const char *str);
419 
425  static wchar_t *duplicate(const wchar_t *str, size_t len);
426 
428  static void upper(wchar_t *str);
429 
431  static void lower(wchar_t *str);
432 
435  static void capitalize(wchar_t *str);
436 
438  static void rightTrim(wchar_t *str);
439 
442  static void rightTrim(wchar_t *str, wchar_t character);
443 
445  static void leftTrim(wchar_t *str);
446 
449  static void leftTrim(wchar_t *str, wchar_t character);
450 
452  static void bothTrim(wchar_t *str);
453 
455  static void bothTrim(wchar_t *str, wchar_t character);
456 
460  static bool strip(wchar_t *str, wchar_t character);
461 
465  static bool strip(wchar_t *str1, const wchar_t *str2);
466 
470  static bool stripSet(wchar_t *str1, const wchar_t *set);
471 
474  static void replace(wchar_t *str,
475  wchar_t oldchar,
476  wchar_t newchar);
477 
480  static void replace(wchar_t *str,
481  const wchar_t *oldchars,
482  wchar_t newchar);
483 
487  static wchar_t *replace(const wchar_t *str,
488  const wchar_t *oldstr,
489  const wchar_t *newstr);
490 
498  static wchar_t *replace(const wchar_t *str,
499  const wchar_t * const *oldstrset,
500  ssize_t *oldstrlen,
501  const wchar_t * const *newstrset);
502 
505  static uint16_t integerLength(int16_t number);
506 
509  static uint16_t integerLength(int32_t number);
510 
513  static uint16_t integerLength(int64_t number);
514 
517  static uint16_t integerLength(uint16_t number);
518 
521  static uint16_t integerLength(uint32_t number);
522 
525  static uint16_t integerLength(uint64_t number);
526 
529  static bool isInteger(const wchar_t *val);
530 
533  static bool isInteger(const wchar_t *val, int32_t size);
534 
537  static bool isNumber(const wchar_t *val);
538 
541  static bool isNumber(const wchar_t *val, int32_t size);
542 
546  static wchar_t *parseNumber(int16_t number);
547 
551  static wchar_t *parseNumber(uint16_t number);
552 
556  static wchar_t *parseNumber(int16_t number,
557  uint16_t zeropadding);
558 
562  static wchar_t *parseNumber(uint16_t number,
563  uint16_t zeropadding);
564 
568  static wchar_t *parseNumber(int32_t number);
569 
573  static wchar_t *parseNumber(uint32_t number);
574 
578  static wchar_t *parseNumber(int32_t number,
579  uint16_t zeropadding);
580 
584  static wchar_t *parseNumber(uint32_t number,
585  uint16_t zeropadding);
586 
590  static wchar_t *parseNumber(int64_t number);
591 
595  static wchar_t *parseNumber(uint64_t number);
596 
600  static wchar_t *parseNumber(int64_t number,
601  uint16_t zeropadding);
602 
606  static wchar_t *parseNumber(uint64_t number,
607  uint16_t zeropadding);
608 
609 
613  static wchar_t *parseNumber(float number);
614 
618  static wchar_t *parseNumber(float number,
619  uint16_t scale);
620 
624  static wchar_t *parseNumber(float number,
625  uint16_t precision,
626  uint16_t scale);
627 
631  static wchar_t *parseNumber(double number);
632 
636  static wchar_t *parseNumber(double number,
637  uint16_t scale);
638 
642  static wchar_t *parseNumber(double number,
643  uint16_t precision,
644  uint16_t scale);
645 
649  static wchar_t *parseNumber(long double number);
650 
654  static wchar_t *parseNumber(long double number,
655  uint16_t scale);
656 
660  static wchar_t *parseNumber(long double number,
661  uint16_t precision,
662  uint16_t scale);
663 
665  static int64_t toInteger(const wchar_t *string);
666 
670  static int64_t toInteger(const wchar_t *string,
671  const wchar_t **endptr);
672 
674  static int64_t toInteger(const wchar_t *string, int32_t base);
675 
679  static int64_t toInteger(const wchar_t *string,
680  const wchar_t **endptr,
681  int32_t base);
682 
684  static uint64_t toUnsignedInteger(
685  const wchar_t *string);
686 
690  static uint64_t toUnsignedInteger(const wchar_t *string,
691  const wchar_t **endptr);
692 
695  static uint64_t toUnsignedInteger(const wchar_t *string,
696  int32_t base);
697 
702  static uint64_t toUnsignedInteger(const wchar_t *string,
703  const wchar_t **endptr,
704  int32_t base);
705 
706 
708  static long double toFloat(const wchar_t *string);
709 
720  static long double toFloatC(const wchar_t *string);
721 
725  static long double toFloat(const wchar_t *string,
726  const wchar_t **endptr);
727 
730  static int64_t convertAmount(const wchar_t *amount);
731 
734  static wchar_t *convertAmount(int64_t amount);
735 
741  static wchar_t *convertAmount(int64_t amount,
742  uint16_t padding);
743 
744 
749  static wchar_t *escape(const wchar_t *input,
750  const wchar_t *characters);
751 
756  static wchar_t *unescape(const wchar_t *input);
757 
761  static void escape(const wchar_t *input, uint64_t inputsize,
762  wchar_t **output, uint64_t *outputsize,
763  const wchar_t *characters);
764 
768  static void unescape(const wchar_t *input,
769  uint64_t inputsize,
770  wchar_t **output,
771  uint64_t *outputsize);
772 
777  static void leftJustify(wchar_t *str, int32_t len);
778 
783  static void rightJustify(wchar_t *str, int32_t len);
784 
788  static void center(wchar_t *str, int32_t len);
789 
796  static wchar_t *pad(const wchar_t *string,
797  wchar_t padchar,
798  int16_t direction,
799  uint64_t totallength);
800 
809  static void split(const wchar_t *string,
810  ssize_t stringlength,
811  const wchar_t *delimiter,
812  ssize_t delimiterlength,
813  bool collapse,
814  wchar_t ***list,
815  uint64_t *listlength);
816 
824  static void split(const wchar_t *string,
825  const wchar_t *delimiter,
826  ssize_t delimiterlength,
827  bool collapse,
828  wchar_t ***list,
829  uint64_t *listlength);
830 
838  static void split(const wchar_t *string,
839  ssize_t stringlength,
840  const wchar_t *delimiter,
841  bool collapse,
842  wchar_t ***list,
843  uint64_t *listlength);
844 
852  static void split(const wchar_t *string,
853  const wchar_t *delimiter,
854  bool collapse,
855  wchar_t ***list,
856  uint64_t *listlength);
857 
861  static wchar_t *subString(const wchar_t *str,
862  size_t start, size_t end);
863 
867  static wchar_t *subString(const wchar_t *str, size_t start);
868 
871  static wchar_t *insertString(const wchar_t *dest,
872  const wchar_t *src,
873  uint64_t index);
874 
892  static ssize_t printf(wchar_t *buffer, size_t len,
893  const wchar_t *format, ...);
894 
915  static ssize_t printf(wchar_t *buffer, size_t len,
916  const wchar_t *format,
917  va_list *argp);
918 
930  static ssize_t printf(wchar_t **buffer,
931  const wchar_t *format, ...);
932 
944  static ssize_t printf(wchar_t **buffer,
945  const wchar_t *format,
946  va_list *argp);
947 
948  #include <rudiments/private/wcharstring.h>
949 };
950 
951 #endif
Definition: character.h:11
Definition: input.h:9
Definition: output.h:9
Definition: wcharstring.h:17
static wchar_t * parseNumber(int32_t number, uint16_t zeropadding)
static wchar_t * parseNumber(int64_t number, uint16_t zeropadding)
static void lower(wchar_t *str)
static wchar_t * parseNumber(double number, uint16_t precision, uint16_t scale)
static wchar_t * duplicate(const wchar_t *str, size_t len)
static wchar_t * convertAmount(int64_t amount, uint16_t padding)
static wchar_t * replace(const wchar_t *str, const wchar_t *oldstr, const wchar_t *newstr)
static int32_t compareIgnoringCase(const wchar_t *str1, const wchar_t *str2, size_t size)
static void center(wchar_t *str, int32_t len)
static bool isYes(const wchar_t *string)
static uint64_t toUnsignedInteger(const wchar_t *string, const wchar_t **endptr)
static wchar_t * parseNumber(long double number)
static void rightJustify(wchar_t *str, int32_t len)
static int32_t compare(const wchar_t *str1, const wchar_t *str2, size_t size)
static wchar_t * unescape(const wchar_t *input)
static const wchar_t * findFirst(const wchar_t *haystack, const wchar_t *needle)
static wchar_t * parseNumber(long double number, uint16_t precision, uint16_t scale)
static const wchar_t * findFirstIgnoringCase(const wchar_t *haystack, const wchar_t *needle)
static void split(const wchar_t *string, const wchar_t *delimiter, bool collapse, wchar_t ***list, uint64_t *listlength)
static wchar_t * parseNumber(int32_t number)
static const wchar_t * findFirstOfSetOrEnd(const wchar_t *haystack, const wchar_t *set)
static const wchar_t * findFirstOrEnd(const wchar_t *haystack, const wchar_t *needle)
static uint16_t integerLength(uint32_t number)
static wchar_t * findFirstIgnoringCase(wchar_t *haystack, wchar_t needle)
static const wchar_t * findFirst(const wchar_t *haystack, wchar_t needle)
static bool strip(wchar_t *str, wchar_t character)
static void leftTrim(wchar_t *str)
static uint16_t integerLength(int32_t number)
static size_t length(const wchar_t *string)
static const wchar_t * findLast(const wchar_t *haystack, wchar_t needle)
static wchar_t * parseNumber(float number)
static wchar_t * before(const wchar_t *str, const wchar_t *delimiter)
static wchar_t * append(wchar_t *dest, int64_t number)
static wchar_t * parseNumber(double number, uint16_t scale)
static wchar_t * append(wchar_t *dest, double number, uint16_t precision, uint16_t scale)
static bool startsWith(const wchar_t *haystack, const wchar_t *needle)
static int32_t compare(const wchar_t *str1, const wchar_t *str2)
static wchar_t * parseNumber(uint16_t number, uint16_t zeropadding)
static wchar_t * findFirst(wchar_t *haystack, wchar_t needle)
static void bothTrim(wchar_t *str, wchar_t character)
static wchar_t * append(wchar_t *dest, const wchar_t *source, size_t size)
static void rightTrim(wchar_t *str)
static const wchar_t * findFirstOrEnd(const wchar_t *haystack, wchar_t needle)
static const wchar_t * findFirstIgnoringCase(const wchar_t *haystack, wchar_t needle)
static wchar_t * subString(const wchar_t *str, size_t start, size_t end)
static wchar_t * after(const wchar_t *str, const wchar_t *delimiter)
static ssize_t printf(wchar_t *buffer, size_t len, const wchar_t *format, va_list *argp)
static ssize_t printf(wchar_t *buffer, size_t len, const wchar_t *format,...)
static bool isNumber(const wchar_t *val)
static void escape(const wchar_t *input, uint64_t inputsize, wchar_t **output, uint64_t *outputsize, const wchar_t *characters)
static const wchar_t * findLast(const wchar_t *haystack, const wchar_t *needle)
static wchar_t * safeCopy(wchar_t *dest, size_t destlen, const wchar_t *source, size_t sourcesize)
static const wchar_t * findLastOfSetOrEnd(const wchar_t *haystack, const wchar_t *set)
static void rightTrim(wchar_t *str, wchar_t character)
static wchar_t * copy(wchar_t *dest, size_t location, const wchar_t *source, size_t size)
static wchar_t * convertAmount(int64_t amount)
static bool isInteger(const wchar_t *val, int32_t size)
static wchar_t * parseNumber(float number, uint16_t scale)
static int64_t convertAmount(const wchar_t *amount)
static void replace(wchar_t *str, const wchar_t *oldchars, wchar_t newchar)
static const wchar_t * findLastOfSet(const wchar_t *haystack, const wchar_t *set)
static wchar_t * pad(const wchar_t *string, wchar_t padchar, int16_t direction, uint64_t totallength)
static wchar_t * escape(const wchar_t *input, const wchar_t *characters)
static uint16_t integerLength(uint16_t number)
static wchar_t * replace(const wchar_t *str, const wchar_t *const *oldstrset, ssize_t *oldstrlen, const wchar_t *const *newstrset)
static wchar_t * append(wchar_t *dest, double number)
static bool contains(const wchar_t *haystack, const wchar_t *needle)
static long double toFloat(const wchar_t *string)
static wchar_t * findFirstOrEndIgnoringCase(wchar_t *haystack, const wchar_t *needle)
static long double toFloatC(const wchar_t *string)
static void split(const wchar_t *string, ssize_t stringlength, const wchar_t *delimiter, bool collapse, wchar_t ***list, uint64_t *listlength)
static wchar_t * parseNumber(int16_t number, uint16_t zeropadding)
static uint16_t integerLength(int64_t number)
static wchar_t * findFirstOfSet(wchar_t *haystack, const wchar_t *set)
static wchar_t * findFirstOrEnd(wchar_t *haystack, const wchar_t *needle)
static bool inSetIgnoringCase(const wchar_t *str, const wchar_t *const *set)
static wchar_t * findLastOfSet(wchar_t *haystack, const wchar_t *set)
static void replace(wchar_t *str, wchar_t oldchar, wchar_t newchar)
static long double toFloat(const wchar_t *string, const wchar_t **endptr)
static int64_t toInteger(const wchar_t *string, const wchar_t **endptr)
static wchar_t * parseNumber(float number, uint16_t precision, uint16_t scale)
static wchar_t * duplicate(const char *str, size_t len)
static wchar_t * subString(const wchar_t *str, size_t start)
static wchar_t * append(wchar_t *dest, const wchar_t *source)
static wchar_t * duplicate(const wchar_t *str)
static wchar_t * parseNumber(int64_t number)
static bool contains(const wchar_t *haystack, wchar_t needle)
static wchar_t * append(wchar_t *dest, double number, uint16_t scale)
static size_t size(const wchar_t *string)
static const wchar_t * findLastIgnoringCase(const wchar_t *haystack, const wchar_t *needle)
static wchar_t * parseNumber(uint32_t number)
static bool containsIgnoringCase(const wchar_t *haystack, wchar_t needle)
static wchar_t * findFirstOfSetOrEnd(wchar_t *haystack, const wchar_t *set)
static wchar_t * parseNumber(uint16_t number)
static wchar_t * findFirstIgnoringCase(wchar_t *haystack, const wchar_t *needle)
static wchar_t * parseNumber(uint64_t number, uint16_t zeropadding)
static uint64_t toUnsignedInteger(const wchar_t *string, const wchar_t **endptr, int32_t base)
static wchar_t * findLast(wchar_t *haystack, const wchar_t *needle)
static uint16_t integerLength(int16_t number)
static wchar_t * insertString(const wchar_t *dest, const wchar_t *src, uint64_t index)
static bool inSet(const wchar_t *str, const wchar_t *const *set)
static bool isNo(const wchar_t *string)
static bool isNullOrEmpty(const wchar_t *string)
static size_t lengthContainingSet(const wchar_t *haystack, const wchar_t *set)
static wchar_t * safeCopy(wchar_t *dest, size_t destlen, const wchar_t *source)
static void split(const wchar_t *string, const wchar_t *delimiter, ssize_t delimiterlength, bool collapse, wchar_t ***list, uint64_t *listlength)
static uint64_t toUnsignedInteger(const wchar_t *string)
static wchar_t * append(wchar_t *dest, uint64_t number)
static int32_t compareIgnoringCase(const wchar_t *str1, const wchar_t *str2)
static size_t lengthNotContainingSet(const wchar_t *haystack, const wchar_t *set)
static void leftJustify(wchar_t *str, int32_t len)
static void split(const wchar_t *string, ssize_t stringlength, const wchar_t *delimiter, ssize_t delimiterlength, bool collapse, wchar_t ***list, uint64_t *listlength)
static wchar_t * findLast(wchar_t *haystack, wchar_t needle)
static wchar_t * findFirst(wchar_t *haystack, const wchar_t *needle)
static void capitalize(wchar_t *str)
static bool isInteger(const wchar_t *val)
static bool endsWith(const wchar_t *haystack, const wchar_t *needle)
static bool isNumber(const wchar_t *val, int32_t size)
static int64_t toInteger(const wchar_t *string, const wchar_t **endptr, int32_t base)
static wchar_t * parseNumber(uint32_t number, uint16_t zeropadding)
static wchar_t * between(const wchar_t *str, const wchar_t *start, const wchar_t *end)
static void bothTrim(wchar_t *str)
static bool stripSet(wchar_t *str1, const wchar_t *set)
static uint16_t integerLength(uint64_t number)
static int64_t toInteger(const wchar_t *string)
static wchar_t * copy(wchar_t *dest, const wchar_t *source, size_t size)
static wchar_t * parseNumber(int16_t number)
static wchar_t * findLastOfSetOrEnd(wchar_t *haystack, const wchar_t *set)
static void upper(wchar_t *str)
static wchar_t * copy(wchar_t *dest, size_t location, const wchar_t *source)
static void unescape(const wchar_t *input, uint64_t inputsize, wchar_t **output, uint64_t *outputsize)
static wchar_t * parseNumber(long double number, uint16_t scale)
static ssize_t printf(wchar_t **buffer, const wchar_t *format,...)
static wchar_t * parseNumber(uint64_t number)
static ssize_t printf(wchar_t **buffer, const wchar_t *format, va_list *argp)
static wchar_t * copy(wchar_t *dest, const wchar_t *source)
static void leftTrim(wchar_t *str, wchar_t character)
static const wchar_t * findFirstOrEndIgnoringCase(const wchar_t *haystack, const wchar_t *needle)
static bool strip(wchar_t *str1, const wchar_t *str2)
static int64_t toInteger(const wchar_t *string, int32_t base)
static const wchar_t * findFirstOfSet(const wchar_t *haystack, const wchar_t *set)
static wchar_t * duplicate(const char *str)
static uint64_t toUnsignedInteger(const wchar_t *string, int32_t base)
static const wchar_t * findFirstOrEndIgnoringCase(const wchar_t *haystack, wchar_t needle)
static wchar_t * parseNumber(double number)
static const wchar_t * findLastIgnoringCase(const wchar_t *haystack, wchar_t needle)
static bool containsIgnoringCase(const wchar_t *haystack, const wchar_t *needle)
static void zero(wchar_t *str, size_t len)