Rudiments
charstring.h
1 // Copyright (c) 2003 David Muse
2 // See the COPYING file for more information.
3 
4 #ifndef RUDIMENTS_CHARSTRING_H
5 #define RUDIMENTS_CHARSTRING_H
6 
7 #include <rudiments/private/charstringincludes.h>
8 
13 class RUDIMENTS_DLLSPEC charstring {
14  public:
15 
17  static size_t length(const char *string);
18 
20  static size_t length(const unsigned char *string);
21 
23  static void zero(char *str, size_t size);
24 
28  static char *append(char *dest, const char *source);
29 
33  static char *append(char *dest, const char *source,
34  size_t size);
35 
39  static char *append(char *dest, int64_t number);
40 
44  static char *append(char *dest, uint64_t number);
45 
49  static char *append(char *dest, double number);
50 
55  static char *append(char *dest, double number,
56  uint16_t scale);
57 
62  static char *append(char *dest, double number,
63  uint16_t precision,
64  uint16_t scale);
65 
69  static char *copy(char *dest, const char *source);
70 
74  static char *copy(char *dest,
75  const char *source, size_t size);
76 
81  static char *copy(char *dest, size_t location,
82  const char *source);
83 
88  static char *copy(char *dest, size_t location,
89  const char *source, size_t size);
90 
95  static char *safeCopy(char *dest, size_t destsize,
96  const char *source);
97 
102  static char *safeCopy(char *dest, size_t destsize,
103  const char *source, size_t sourcesize);
104 
107  static int32_t compare(const char *str1, const char *str2);
108 
111  static int32_t compare(const char *str1, const char *str2,
112  size_t size);
113 
116  static int32_t compareIgnoringCase(const char *str1,
117  const char *str2);
118 
122  static int32_t compareIgnoringCase(const char *str1,
123  const char *str2,
124  size_t size);
125 
130  static bool inSet(const char *str, const char * const *set);
131 
134  static bool contains(const char *haystack,
135  const char *needle);
136 
139  static bool contains(const char *haystack, char needle);
140 
143  static const char *findFirst(const char *haystack,
144  const char *needle);
145 
148  static const char *findFirst(const char *haystack,
149  char needle);
150 
154  static const char *findFirstOrEnd(const char *haystack,
155  char needle);
156 
160  static const char *findFirstOrEnd(const char *haystack,
161  const char *needle);
162 
165  static const char *findLast(const char *haystack,
166  const char *needle);
167 
170  static const char *findLast(const char *haystack,
171  char needle);
172 
175  static char *findFirst(char *haystack, const char *needle);
176 
179  static char *findFirst(char *haystack, char needle);
180 
184  static char *findFirstOrEnd(char *haystack,
185  const char *needle);
186 
189  static char *findLast(char *haystack, const char *needle);
190 
193  static char *findLast(char *haystack, char needle);
194 
198  static const char *findFirstOfSet(const char *haystack,
199  const char *set);
200 
204  static char *findFirstOfSet(char *haystack,
205  const char *set);
206 
211  static const char *findFirstOfSetOrEnd(
212  const char *haystack,
213  const char *set);
214 
219  static char *findFirstOfSetOrEnd(
220  char *haystack,
221  const char *set);
222 
226  static size_t lengthContainingSet(const char *haystack,
227  const char *set);
228 
232  static size_t lengthNotContainingSet(const char *haystack,
233  const char *set);
234 
239  static char *duplicate(const char *str);
240 
246  static char *duplicate(const char *str, size_t length);
247 
249  static void upper(char *str);
250 
252  static void lower(char *str);
253 
256  static void capitalize(char *str);
257 
259  static void rightTrim(char *str);
260 
263  static void rightTrim(char *str, char character);
264 
266  static void leftTrim(char *str);
267 
270  static void leftTrim(char *str, char character);
271 
273  static void bothTrim(char *str);
274 
276  static void bothTrim(char *str, char character);
277 
279  static void strip(char *str, char character);
280 
282  static void strip(char *str1, const char *str2);
283 
286  static void replace(char *str,
287  char oldchar, char newchar);
288 
291  static void replace(char *str,
292  const char *oldchars, char newchar);
293 
296  static uint16_t integerLength(int16_t number);
297 
300  static uint16_t integerLength(int32_t number);
301 
304  static uint16_t integerLength(int64_t number);
305 
308  static uint16_t integerLength(uint16_t number);
309 
312  static uint16_t integerLength(uint32_t number);
313 
316  static uint16_t integerLength(uint64_t number);
317 
320  static bool isInteger(const char *val);
321 
324  static bool isInteger(const char *val, int32_t size);
325 
328  static bool isNumber(const char *val);
329 
332  static bool isNumber(const char *val, int32_t size);
333 
337  static char *parseNumber(int16_t number);
338 
342  static char *parseNumber(uint16_t number);
343 
347  static char *parseNumber(int16_t number,
348  uint16_t zeropadding);
349 
353  static char *parseNumber(uint16_t number,
354  uint16_t zeropadding);
355 
359  static char *parseNumber(int32_t number);
360 
364  static char *parseNumber(uint32_t number);
365 
369  static char *parseNumber(int32_t number,
370  uint16_t zeropadding);
371 
375  static char *parseNumber(uint32_t number,
376  uint16_t zeropadding);
377 
381  static char *parseNumber(int64_t number);
382 
386  static char *parseNumber(uint64_t number);
387 
391  static char *parseNumber(int64_t number,
392  uint16_t zeropadding);
393 
397  static char *parseNumber(uint64_t number,
398  uint16_t zeropadding);
399 
400 
404  static char *parseNumber(float number);
405 
409  static char *parseNumber(float number,
410  uint16_t scale);
411 
415  static char *parseNumber(float number,
416  uint16_t precision,
417  uint16_t scale);
418 
422  static char *parseNumber(double number);
423 
427  static char *parseNumber(double number,
428  uint16_t scale);
429 
433  static char *parseNumber(double number,
434  uint16_t precision,
435  uint16_t scale);
436 
440  static char *parseNumber(long double number);
441 
445  static char *parseNumber(long double number,
446  uint16_t scale);
447 
451  static char *parseNumber(long double number,
452  uint16_t precision,
453  uint16_t scale);
454 
456  static int64_t toInteger(const char *string);
457 
461  static int64_t toInteger(const char *string, char **endptr);
462 
464  static int64_t toInteger(const char *string, int32_t base);
465 
469  static int64_t toInteger(const char *string,
470  char **endptr, int32_t base);
471 
473  static uint64_t toUnsignedInteger(const char *string);
474 
478  static uint64_t toUnsignedInteger(const char *string,
479  char **endptr);
480 
483  static uint64_t toUnsignedInteger(const char *string,
484  int32_t base);
485 
490  static uint64_t toUnsignedInteger(const char *string,
491  char **endptr,
492  int32_t base);
493 
494 
496  static long double toFloat(const char *string);
497 
501  static long double toFloat(const char *string,
502  char **endptr);
503 
506  static int64_t convertAmount(const char *amount);
507 
510  static char *convertAmount(int64_t amount);
511 
517  static char *convertAmount(int64_t amount,
518  uint16_t padding);
519 
520 
524  static char *httpEscape(const char *input);
525 
529  static char *httpUnescape(const char *input);
530 
535  static char *escape(const char *input,
536  const char *characters);
537 
542  static char *unescape(const char *input);
543 
547  static void escape(const char *input, uint64_t inputsize,
548  char **output, uint64_t *outputsize,
549  const char *characters);
550 
554  static void unescape(const char *input, uint64_t inputsize,
555  char **output, uint64_t *outputsize);
556 
560  static char *base64Encode(const unsigned char *input);
561 
564  static char *base64Encode(const unsigned char *input,
565  uint64_t inputsize);
566 
570  static void base64Encode(const unsigned char *input,
571  uint64_t inputsize,
572  char **output,
573  uint64_t *outputsize);
574 
578  static unsigned char *base64Decode(const char *input);
579 
582  static unsigned char *base64Decode(const char *input,
583  uint64_t inputsize);
584 
588  static void base64Decode(const char *input,
589  uint64_t inputsize,
590  unsigned char **output,
591  uint64_t *outputsize);
592 
597  static void leftJustify(char *str, int32_t length);
598 
609  static void rightPad(char *str, int32_t lngth,
610  char padchar, bool fill);
611 
616  static void rightJustify(char *str, int32_t length);
617 
621  static void center(char *str, int32_t length);
622 
630  static void split(const char *string,
631  ssize_t stringlength,
632  const char *delimiter,
633  ssize_t delimiterlength,
634  bool collapse,
635  char ***list,
636  uint64_t *listlength);
637 
645  static void split(const char *string,
646  const char *delimiter,
647  ssize_t delimiterlength,
648  bool collapse,
649  char ***list,
650  uint64_t *listlength);
658  static void split(const char *string,
659  ssize_t stringlength,
660  const char *delimiter,
661  bool collapse,
662  char ***list,
663  uint64_t *listlength);
664 
672  static void split(const char *string,
673  const char *delimiter,
674  bool collapse,
675  char ***list,
676  uint64_t *listlength);
677 
681  static char *subString(const char *str,
682  size_t start, size_t end);
683 
687  static char *subString(const char *str, size_t start);
688 
691  static char *insertString(const char *dest,
692  const char *src,
693  uint64_t index);
694 
696  static void obfuscate(char *str);
697 
700  static void deobfuscate(char *str);
701 
707  static char *padString(const char *string,
708  char padchar,
709  int16_t direction,
710  uint64_t totallength);
711 
729  static ssize_t printf(char *buffer, size_t length,
730  const char *format, ...);
731 
752  static ssize_t printf(char *buffer, size_t length,
753  const char *format,
754  va_list *argp);
755 
756  #include <rudiments/private/charstring.h>
757 };
758 
759 #endif