4 #ifndef RUDIMENTS_CHARSTRING_H
5 #define RUDIMENTS_CHARSTRING_H
7 #include <rudiments/private/charstringincludes.h>
9 #ifdef RUDIMENTS_NAMESPACE
21 static size_t length(
const char *
string);
24 static size_t length(
const unsigned char *
string);
27 static void zero(
char *str,
size_t size);
32 static char *append(
char *dest,
const char *source);
37 static char *append(
char *dest,
const char *source,
43 static char *append(
char *dest, int64_t number);
48 static char *append(
char *dest, uint64_t number);
53 static char *append(
char *dest,
double number);
59 static char *append(
char *dest,
double number,
66 static char *append(
char *dest,
double number,
73 static char *copy(
char *dest,
const char *source);
78 static char *copy(
char *dest,
79 const char *source,
size_t size);
85 static char *copy(
char *dest,
size_t location,
92 static char *copy(
char *dest,
size_t location,
93 const char *source,
size_t size);
97 static int32_t compare(
const char *str1,
const char *str2);
101 static int32_t compare(
const char *str1,
const char *str2,
106 static int32_t compareIgnoringCase(
const char *str1,
112 static int32_t compareIgnoringCase(
const char *str1,
118 static bool contains(
const char *haystack,
123 static bool contains(
const char *haystack,
char needle);
127 static const char *findFirst(
const char *haystack,
132 static const char *findFirst(
const char *haystack,
138 static const char *findFirstOrEnd(
const char *haystack,
144 static const char *findFirstOrEnd(
const char *haystack,
149 static const char *findLast(
const char *haystack,
154 static const char *findLast(
const char *haystack,
159 static char *findFirst(
char *haystack,
const char *needle);
163 static char *findFirst(
char *haystack,
char needle);
168 static char *findFirstOrEnd(
char *haystack,
173 static char *findLast(
char *haystack,
const char *needle);
177 static char *findLast(
char *haystack,
char needle);
182 static const char *findFirstOfSet(
const char *haystack,
188 static char *findFirstOfSet(
char *haystack,
195 static const char *findFirstOfSetOrEnd(
196 const char *haystack,
203 static char *findFirstOfSetOrEnd(
210 static size_t lengthContainingSet(
const char *haystack,
216 static size_t lengthNotContainingSet(
const char *haystack,
223 static char *duplicate(
const char *str);
230 static char *duplicate(
const char *str,
size_t length);
233 static void upper(
char *str);
236 static void lower(
char *str);
240 static void capitalize(
char *str);
243 static void rightTrim(
char *str);
247 static void rightTrim(
char *str,
char character);
250 static void leftTrim(
char *str);
254 static void leftTrim(
char *str,
char character);
257 static void bothTrim(
char *str);
260 static void bothTrim(
char *str,
char character);
263 static void strip(
char *str,
char character);
266 static void strip(
char *str1,
const char *str2);
270 static void replace(
char *str,
271 char oldchar,
char newchar);
275 static void replace(
char *str,
276 const char *oldchars,
char newchar);
280 static uint16_t integerLength(int16_t number);
284 static uint16_t integerLength(int32_t number);
288 static uint16_t integerLength(int64_t number);
292 static uint16_t integerLength(uint16_t number);
296 static uint16_t integerLength(uint32_t number);
300 static uint16_t integerLength(uint64_t number);
304 static bool isInteger(
const char *val);
308 static bool isInteger(
const char *val, int32_t size);
312 static bool isNumber(
const char *val);
316 static bool isNumber(
const char *val, int32_t size);
321 static char *parseNumber(int16_t number);
326 static char *parseNumber(uint16_t number);
331 static char *parseNumber(int16_t number,
332 uint16_t zeropadding);
337 static char *parseNumber(uint16_t number,
338 uint16_t zeropadding);
343 static char *parseNumber(int32_t number);
348 static char *parseNumber(uint32_t number);
353 static char *parseNumber(int32_t number,
354 uint16_t zeropadding);
359 static char *parseNumber(uint32_t number,
360 uint16_t zeropadding);
365 static char *parseNumber(int64_t number);
370 static char *parseNumber(uint64_t number);
375 static char *parseNumber(int64_t number,
376 uint16_t zeropadding);
381 static char *parseNumber(uint64_t number,
382 uint16_t zeropadding);
388 static char *parseNumber(
float number);
393 static char *parseNumber(
float number,
399 static char *parseNumber(
float number,
406 static char *parseNumber(
double number);
411 static char *parseNumber(
double number,
417 static char *parseNumber(
double number,
424 static char *parseNumber(
long double number);
429 static char *parseNumber(
long double number,
435 static char *parseNumber(
long double number,
440 static int64_t toInteger(
const char *
string);
445 static int64_t toInteger(
const char *
string,
char **endptr);
448 static int64_t toInteger(
const char *
string, int32_t base);
453 static int64_t toInteger(
const char *
string,
454 char **endptr, int32_t base);
457 static uint64_t toUnsignedInteger(
const char *
string);
462 static uint64_t toUnsignedInteger(
const char *
string,
467 static uint64_t toUnsignedInteger(
const char *
string,
474 static uint64_t toUnsignedInteger(
const char *
string,
480 static long double toFloat(
const char *
string);
485 static long double toFloat(
const char *
string,
492 static char *httpEscape(
const char *input);
497 static char *httpUnescape(
const char *input);
503 static char *escape(
const char *input,
504 const char *characters);
510 static char *unescape(
const char *input);
515 static void escape(
const char *input, uint64_t inputsize,
516 char **output, uint64_t *outputsize,
517 const char *characters);
522 static void unescape(
const char *input, uint64_t inputsize,
523 char **output, uint64_t *outputsize);
528 static char *base64Encode(
const unsigned char *input);
532 static char *base64Encode(
const unsigned char *input,
538 static void base64Encode(
const unsigned char *input,
541 uint64_t *outputsize);
546 static unsigned char *base64Decode(
const char *input);
550 static unsigned char *base64Decode(
const char *input,
556 static void base64Decode(
const char *input,
558 unsigned char **output,
559 uint64_t *outputsize);
565 static void leftJustify(
char *str, int32_t length);
577 static void rightPad(
char *str, int32_t lngth,
578 char padchar,
bool fill);
584 static void rightJustify(
char *str, int32_t length);
589 static void center(
char *str, int32_t length);
595 static void safePrint(
const char *str);
598 static void safePrint(
const char *str, int32_t length);
601 static void printBits(
unsigned char value);
604 static void printBits(uint16_t value);
607 static void printBits(uint32_t value);
610 static void printBits(uint64_t value);
613 static void printBits(
char value);
616 static void printBits(int16_t value);
619 static void printBits(int32_t value);
622 static void printBits(int64_t value);
625 static void printBits(
unsigned char *bits, uint64_t size);
634 static void split(
const char *
string,
635 ssize_t stringlength,
636 const char *delimiter,
637 ssize_t delimiterlength,
640 uint64_t *listlength);
649 static void split(
const char *
string,
650 const char *delimiter,
651 ssize_t delimiterlength,
654 uint64_t *listlength);
662 static void split(
const char *
string,
663 ssize_t stringlength,
664 const char *delimiter,
667 uint64_t *listlength);
676 static void split(
const char *
string,
677 const char *delimiter,
680 uint64_t *listlength);
685 static char *subString(
const char *str,
686 size_t start,
size_t end);
691 static char *subString(
const char *str,
size_t start);
693 #include <rudiments/private/charstring.h>
696 #ifdef RUDIMENTS_NAMESPACE