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);
281 static bool strip(
char *str,
char character);
286 static bool strip(
char *str1,
const char *str2);
291 static bool stripSet(
char *str1,
const char *
set);
295 static void replace(
char *str,
296 char oldchar,
char newchar);
300 static void replace(
char *str,
301 const char *oldchars,
char newchar);
305 static uint16_t integerLength(int16_t number);
309 static uint16_t integerLength(int32_t number);
313 static uint16_t integerLength(int64_t number);
317 static uint16_t integerLength(uint16_t number);
321 static uint16_t integerLength(uint32_t number);
325 static uint16_t integerLength(uint64_t number);
329 static bool isInteger(
const char *val);
333 static bool isInteger(
const char *val, int32_t size);
337 static bool isNumber(
const char *val);
341 static bool isNumber(
const char *val, int32_t size);
346 static char *parseNumber(int16_t number);
351 static char *parseNumber(uint16_t number);
356 static char *parseNumber(int16_t number,
357 uint16_t zeropadding);
362 static char *parseNumber(uint16_t number,
363 uint16_t zeropadding);
368 static char *parseNumber(int32_t number);
373 static char *parseNumber(uint32_t number);
378 static char *parseNumber(int32_t number,
379 uint16_t zeropadding);
384 static char *parseNumber(uint32_t number,
385 uint16_t zeropadding);
390 static char *parseNumber(int64_t number);
395 static char *parseNumber(uint64_t number);
400 static char *parseNumber(int64_t number,
401 uint16_t zeropadding);
406 static char *parseNumber(uint64_t number,
407 uint16_t zeropadding);
413 static char *parseNumber(
float number);
418 static char *parseNumber(
float number,
424 static char *parseNumber(
float number,
431 static char *parseNumber(
double number);
436 static char *parseNumber(
double number,
442 static char *parseNumber(
double number,
449 static char *parseNumber(
long double number);
454 static char *parseNumber(
long double number,
460 static char *parseNumber(
long double number,
465 static int64_t toInteger(
const char *
string);
470 static int64_t toInteger(
const char *
string,
char **endptr);
473 static int64_t toInteger(
const char *
string, int32_t base);
478 static int64_t toInteger(
const char *
string,
479 char **endptr, int32_t base);
482 static uint64_t toUnsignedInteger(
const char *
string);
487 static uint64_t toUnsignedInteger(
const char *
string,
492 static uint64_t toUnsignedInteger(
const char *
string,
499 static uint64_t toUnsignedInteger(
const char *
string,
505 static long double toFloat(
const char *
string);
510 static long double toFloat(
const char *
string,
515 static int64_t convertAmount(
const char *amount);
519 static char *convertAmount(int64_t amount);
526 static char *convertAmount(int64_t amount,
533 static char *httpEscape(
const char *input);
538 static char *httpUnescape(
const char *input);
544 static char *escape(
const char *input,
545 const char *characters);
551 static char *unescape(
const char *input);
556 static void escape(
const char *input, uint64_t inputsize,
557 char **output, uint64_t *outputsize,
558 const char *characters);
563 static void unescape(
const char *input, uint64_t inputsize,
564 char **output, uint64_t *outputsize);
569 static char *base64Encode(
const unsigned char *input);
573 static char *base64Encode(
const unsigned char *input,
579 static void base64Encode(
const unsigned char *input,
582 uint64_t *outputsize);
587 static unsigned char *base64Decode(
const char *input);
591 static unsigned char *base64Decode(
const char *input,
597 static void base64Decode(
const char *input,
599 unsigned char **output,
600 uint64_t *outputsize);
606 static void leftJustify(
char *str, int32_t length);
618 static void rightPad(
char *str, int32_t lngth,
619 char padchar,
bool fill);
625 static void rightJustify(
char *str, int32_t length);
630 static void center(
char *str, int32_t length);
639 static void split(
const char *
string,
640 ssize_t stringlength,
641 const char *delimiter,
642 ssize_t delimiterlength,
645 uint64_t *listlength);
654 static void split(
const char *
string,
655 const char *delimiter,
656 ssize_t delimiterlength,
659 uint64_t *listlength);
667 static void split(
const char *
string,
668 ssize_t stringlength,
669 const char *delimiter,
672 uint64_t *listlength);
681 static void split(
const char *
string,
682 const char *delimiter,
685 uint64_t *listlength);
690 static char *subString(
const char *str,
691 size_t start,
size_t end);
696 static char *subString(
const char *str,
size_t start);
700 static char *insertString(
const char *dest,
705 static void obfuscate(
char *str);
709 static void deobfuscate(
char *str);
716 static char *padString(
const char *
string,
719 uint64_t totallength);
738 static ssize_t printf(
char *buffer,
size_t length,
739 const char *format, ...);
761 static ssize_t printf(
char *buffer,
size_t length,
765 #include <rudiments/private/charstring.h>