4 #ifndef RUDIMENTS_CHARSTRING_H
5 #define RUDIMENTS_CHARSTRING_H
7 #include <rudiments/private/charstringincludes.h>
17 static size_t length(
const char *
string);
20 static size_t length(
const unsigned char *
string);
23 static void zero(
char *str,
size_t size);
28 static char *append(
char *dest,
const char *source);
33 static char *append(
char *dest,
const char *source,
39 static char *append(
char *dest, int64_t number);
44 static char *append(
char *dest, uint64_t number);
49 static char *append(
char *dest,
double number);
55 static char *append(
char *dest,
double number,
62 static char *append(
char *dest,
double number,
69 static char *copy(
char *dest,
const char *source);
74 static char *copy(
char *dest,
75 const char *source,
size_t size);
81 static char *copy(
char *dest,
size_t location,
88 static char *copy(
char *dest,
size_t location,
89 const char *source,
size_t size);
95 static char *safeCopy(
char *dest,
size_t destsize,
102 static char *safeCopy(
char *dest,
size_t destsize,
103 const char *source,
size_t sourcesize);
107 static int32_t compare(
const char *str1,
const char *str2);
111 static int32_t compare(
const char *str1,
const char *str2,
116 static int32_t compareIgnoringCase(
const char *str1,
122 static int32_t compareIgnoringCase(
const char *str1,
130 static bool inSet(
const char *str,
const char *
const *
set);
134 static bool contains(
const char *haystack,
139 static bool contains(
const char *haystack,
char needle);
143 static const char *findFirst(
const char *haystack,
148 static const char *findFirst(
const char *haystack,
154 static const char *findFirstOrEnd(
const char *haystack,
160 static const char *findFirstOrEnd(
const char *haystack,
165 static const char *findLast(
const char *haystack,
170 static const char *findLast(
const char *haystack,
175 static char *findFirst(
char *haystack,
const char *needle);
179 static char *findFirst(
char *haystack,
char needle);
184 static char *findFirstOrEnd(
char *haystack,
189 static char *findLast(
char *haystack,
const char *needle);
193 static char *findLast(
char *haystack,
char needle);
198 static const char *findFirstOfSet(
const char *haystack,
204 static char *findFirstOfSet(
char *haystack,
211 static const char *findFirstOfSetOrEnd(
212 const char *haystack,
219 static char *findFirstOfSetOrEnd(
226 static size_t lengthContainingSet(
const char *haystack,
232 static size_t lengthNotContainingSet(
const char *haystack,
239 static char *duplicate(
const char *str);
246 static char *duplicate(
const char *str,
size_t length);
249 static void upper(
char *str);
252 static void lower(
char *str);
256 static void capitalize(
char *str);
259 static void rightTrim(
char *str);
263 static void rightTrim(
char *str,
char character);
266 static void leftTrim(
char *str);
270 static void leftTrim(
char *str,
char character);
273 static void bothTrim(
char *str);
276 static void bothTrim(
char *str,
char character);
279 static void strip(
char *str,
char character);
282 static void strip(
char *str1,
const char *str2);
286 static void replace(
char *str,
287 char oldchar,
char newchar);
291 static void replace(
char *str,
292 const char *oldchars,
char newchar);
296 static uint16_t integerLength(int16_t number);
300 static uint16_t integerLength(int32_t number);
304 static uint16_t integerLength(int64_t number);
308 static uint16_t integerLength(uint16_t number);
312 static uint16_t integerLength(uint32_t number);
316 static uint16_t integerLength(uint64_t number);
320 static bool isInteger(
const char *val);
324 static bool isInteger(
const char *val, int32_t size);
328 static bool isNumber(
const char *val);
332 static bool isNumber(
const char *val, int32_t size);
337 static char *parseNumber(int16_t number);
342 static char *parseNumber(uint16_t number);
347 static char *parseNumber(int16_t number,
348 uint16_t zeropadding);
353 static char *parseNumber(uint16_t number,
354 uint16_t zeropadding);
359 static char *parseNumber(int32_t number);
364 static char *parseNumber(uint32_t number);
369 static char *parseNumber(int32_t number,
370 uint16_t zeropadding);
375 static char *parseNumber(uint32_t number,
376 uint16_t zeropadding);
381 static char *parseNumber(int64_t number);
386 static char *parseNumber(uint64_t number);
391 static char *parseNumber(int64_t number,
392 uint16_t zeropadding);
397 static char *parseNumber(uint64_t number,
398 uint16_t zeropadding);
404 static char *parseNumber(
float number);
409 static char *parseNumber(
float number,
415 static char *parseNumber(
float number,
422 static char *parseNumber(
double number);
427 static char *parseNumber(
double number,
433 static char *parseNumber(
double number,
440 static char *parseNumber(
long double number);
445 static char *parseNumber(
long double number,
451 static char *parseNumber(
long double number,
456 static int64_t toInteger(
const char *
string);
461 static int64_t toInteger(
const char *
string,
char **endptr);
464 static int64_t toInteger(
const char *
string, int32_t base);
469 static int64_t toInteger(
const char *
string,
470 char **endptr, int32_t base);
473 static uint64_t toUnsignedInteger(
const char *
string);
478 static uint64_t toUnsignedInteger(
const char *
string,
483 static uint64_t toUnsignedInteger(
const char *
string,
490 static uint64_t toUnsignedInteger(
const char *
string,
496 static long double toFloat(
const char *
string);
501 static long double toFloat(
const char *
string,
506 static int64_t convertAmount(
const char *amount);
510 static char *convertAmount(int64_t amount);
517 static char *convertAmount(int64_t amount,
524 static char *httpEscape(
const char *input);
529 static char *httpUnescape(
const char *input);
535 static char *escape(
const char *input,
536 const char *characters);
542 static char *unescape(
const char *input);
547 static void escape(
const char *input, uint64_t inputsize,
548 char **output, uint64_t *outputsize,
549 const char *characters);
554 static void unescape(
const char *input, uint64_t inputsize,
555 char **output, uint64_t *outputsize);
560 static char *base64Encode(
const unsigned char *input);
564 static char *base64Encode(
const unsigned char *input,
570 static void base64Encode(
const unsigned char *input,
573 uint64_t *outputsize);
578 static unsigned char *base64Decode(
const char *input);
582 static unsigned char *base64Decode(
const char *input,
588 static void base64Decode(
const char *input,
590 unsigned char **output,
591 uint64_t *outputsize);
597 static void leftJustify(
char *str, int32_t length);
609 static void rightPad(
char *str, int32_t lngth,
610 char padchar,
bool fill);
616 static void rightJustify(
char *str, int32_t length);
621 static void center(
char *str, int32_t length);
630 static void split(
const char *
string,
631 ssize_t stringlength,
632 const char *delimiter,
633 ssize_t delimiterlength,
636 uint64_t *listlength);
645 static void split(
const char *
string,
646 const char *delimiter,
647 ssize_t delimiterlength,
650 uint64_t *listlength);
658 static void split(
const char *
string,
659 ssize_t stringlength,
660 const char *delimiter,
663 uint64_t *listlength);
672 static void split(
const char *
string,
673 const char *delimiter,
676 uint64_t *listlength);
681 static char *subString(
const char *str,
682 size_t start,
size_t end);
687 static char *subString(
const char *str,
size_t start);
691 static char *insertString(
const char *dest,
696 static void obfuscate(
char *str);
700 static void deobfuscate(
char *str);
707 static char *padString(
const char *
string,
710 uint64_t totallength);
729 static ssize_t printf(
char *buffer,
size_t length,
730 const char *format, ...);
752 static ssize_t printf(
char *buffer,
size_t length,
756 #include <rudiments/private/charstring.h>