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 
9 #ifdef RUDIMENTS_NAMESPACE
10 namespace rudiments {
11 #endif
12 
17 class RUDIMENTS_DLLSPEC charstring {
18  public:
19 
21  static size_t length(const char *string);
22 
24  static size_t length(const unsigned char *string);
25 
27  static void zero(char *str, size_t size);
28 
32  static char *append(char *dest, const char *source);
33 
37  static char *append(char *dest, const char *source,
38  size_t size);
39 
43  static char *append(char *dest, int64_t number);
44 
48  static char *append(char *dest, uint64_t number);
49 
53  static char *append(char *dest, double number);
54 
59  static char *append(char *dest, double number,
60  uint16_t scale);
61 
66  static char *append(char *dest, double number,
67  uint16_t precision,
68  uint16_t scale);
69 
73  static char *copy(char *dest, const char *source);
74 
78  static char *copy(char *dest,
79  const char *source, size_t size);
80 
85  static char *copy(char *dest, size_t location,
86  const char *source);
87 
92  static char *copy(char *dest, size_t location,
93  const char *source, size_t size);
94 
97  static int32_t compare(const char *str1, const char *str2);
98 
101  static int32_t compare(const char *str1, const char *str2,
102  size_t size);
103 
106  static int32_t compareIgnoringCase(const char *str1,
107  const char *str2);
108 
112  static int32_t compareIgnoringCase(const char *str1,
113  const char *str2,
114  size_t size);
115 
118  static bool contains(const char *haystack,
119  const char *needle);
120 
123  static bool contains(const char *haystack, char needle);
124 
127  static const char *findFirst(const char *haystack,
128  const char *needle);
129 
132  static const char *findFirst(const char *haystack,
133  char needle);
134 
138  static const char *findFirstOrEnd(const char *haystack,
139  char needle);
140 
144  static const char *findFirstOrEnd(const char *haystack,
145  const char *needle);
146 
149  static const char *findLast(const char *haystack,
150  const char *needle);
151 
154  static const char *findLast(const char *haystack,
155  char needle);
156 
159  static char *findFirst(char *haystack, const char *needle);
160 
163  static char *findFirst(char *haystack, char needle);
164 
168  static char *findFirstOrEnd(char *haystack,
169  const char *needle);
170 
173  static char *findLast(char *haystack, const char *needle);
174 
177  static char *findLast(char *haystack, char needle);
178 
182  static const char *findFirstOfSet(const char *haystack,
183  const char *set);
184 
188  static char *findFirstOfSet(char *haystack,
189  const char *set);
190 
195  static const char *findFirstOfSetOrEnd(
196  const char *haystack,
197  const char *set);
198 
203  static char *findFirstOfSetOrEnd(
204  char *haystack,
205  const char *set);
206 
210  static size_t lengthContainingSet(const char *haystack,
211  const char *set);
212 
216  static size_t lengthNotContainingSet(const char *haystack,
217  const char *set);
218 
223  static char *duplicate(const char *str);
224 
230  static char *duplicate(const char *str, size_t length);
231 
233  static void upper(char *str);
234 
236  static void lower(char *str);
237 
240  static void capitalize(char *str);
241 
243  static void rightTrim(char *str);
244 
247  static void rightTrim(char *str, char character);
248 
250  static void leftTrim(char *str);
251 
254  static void leftTrim(char *str, char character);
255 
257  static void bothTrim(char *str);
258 
260  static void bothTrim(char *str, char character);
261 
263  static void strip(char *str, char character);
264 
266  static void strip(char *str1, const char *str2);
267 
270  static void replace(char *str,
271  char oldchar, char newchar);
272 
275  static void replace(char *str,
276  const char *oldchars, char newchar);
277 
280  static uint16_t integerLength(int16_t number);
281 
284  static uint16_t integerLength(int32_t number);
285 
288  static uint16_t integerLength(int64_t number);
289 
292  static uint16_t integerLength(uint16_t number);
293 
296  static uint16_t integerLength(uint32_t number);
297 
300  static uint16_t integerLength(uint64_t number);
301 
304  static bool isInteger(const char *val);
305 
308  static bool isInteger(const char *val, int32_t size);
309 
312  static bool isNumber(const char *val);
313 
316  static bool isNumber(const char *val, int32_t size);
317 
321  static char *parseNumber(int16_t number);
322 
326  static char *parseNumber(uint16_t number);
327 
331  static char *parseNumber(int16_t number,
332  uint16_t zeropadding);
333 
337  static char *parseNumber(uint16_t number,
338  uint16_t zeropadding);
339 
343  static char *parseNumber(int32_t number);
344 
348  static char *parseNumber(uint32_t number);
349 
353  static char *parseNumber(int32_t number,
354  uint16_t zeropadding);
355 
359  static char *parseNumber(uint32_t number,
360  uint16_t zeropadding);
361 
365  static char *parseNumber(int64_t number);
366 
370  static char *parseNumber(uint64_t number);
371 
375  static char *parseNumber(int64_t number,
376  uint16_t zeropadding);
377 
381  static char *parseNumber(uint64_t number,
382  uint16_t zeropadding);
383 
384 
388  static char *parseNumber(float number);
389 
393  static char *parseNumber(float number,
394  uint16_t scale);
395 
399  static char *parseNumber(float number,
400  uint16_t precision,
401  uint16_t scale);
402 
406  static char *parseNumber(double number);
407 
411  static char *parseNumber(double number,
412  uint16_t scale);
413 
417  static char *parseNumber(double number,
418  uint16_t precision,
419  uint16_t scale);
420 
424  static char *parseNumber(long double number);
425 
429  static char *parseNumber(long double number,
430  uint16_t scale);
431 
435  static char *parseNumber(long double number,
436  uint16_t precision,
437  uint16_t scale);
438 
440  static int64_t toInteger(const char *string);
441 
445  static int64_t toInteger(const char *string, char **endptr);
446 
448  static int64_t toInteger(const char *string, int32_t base);
449 
453  static int64_t toInteger(const char *string,
454  char **endptr, int32_t base);
455 
457  static uint64_t toUnsignedInteger(const char *string);
458 
462  static uint64_t toUnsignedInteger(const char *string,
463  char **endptr);
464 
467  static uint64_t toUnsignedInteger(const char *string,
468  int32_t base);
469 
474  static uint64_t toUnsignedInteger(const char *string,
475  char **endptr,
476  int32_t base);
477 
478 
480  static long double toFloat(const char *string);
481 
485  static long double toFloat(const char *string,
486  char **endptr);
487 
488 
492  static char *httpEscape(const char *input);
493 
497  static char *httpUnescape(const char *input);
498 
503  static char *escape(const char *input,
504  const char *characters);
505 
510  static char *unescape(const char *input);
511 
515  static void escape(const char *input, uint64_t inputsize,
516  char **output, uint64_t *outputsize,
517  const char *characters);
518 
522  static void unescape(const char *input, uint64_t inputsize,
523  char **output, uint64_t *outputsize);
524 
528  static char *base64Encode(const unsigned char *input);
529 
532  static char *base64Encode(const unsigned char *input,
533  uint64_t inputsize);
534 
538  static void base64Encode(const unsigned char *input,
539  uint64_t inputsize,
540  char **output,
541  uint64_t *outputsize);
542 
546  static unsigned char *base64Decode(const char *input);
547 
550  static unsigned char *base64Decode(const char *input,
551  uint64_t inputsize);
552 
556  static void base64Decode(const char *input,
557  uint64_t inputsize,
558  unsigned char **output,
559  uint64_t *outputsize);
560 
565  static void leftJustify(char *str, int32_t length);
566 
577  static void rightPad(char *str, int32_t lngth,
578  char padchar, bool fill);
579 
584  static void rightJustify(char *str, int32_t length);
585 
589  static void center(char *str, int32_t length);
590 
595  static void safePrint(const char *str);
596 
598  static void safePrint(const char *str, int32_t length);
599 
600  // Prints "value" as a string of ones and zeros.
601  static void printBits(unsigned char value);
602 
603  // Prints "value" as a string of ones and zeros.
604  static void printBits(uint16_t value);
605 
606  // Prints "value" as a string of ones and zeros.
607  static void printBits(uint32_t value);
608 
609  // Prints "value" as a string of ones and zeros.
610  static void printBits(uint64_t value);
611 
612  // Prints "value" as a string of ones and zeros.
613  static void printBits(char value);
614 
615  // Prints "value" as a string of ones and zeros.
616  static void printBits(int16_t value);
617 
618  // Prints "value" as a string of ones and zeros.
619  static void printBits(int32_t value);
620 
621  // Prints "value" as a string of ones and zeros.
622  static void printBits(int64_t value);
623 
624  // Prints "value" as a string of ones and zeros.
625  static void printBits(unsigned char *bits, uint64_t size);
626 
634  static void split(const char *string,
635  ssize_t stringlength,
636  const char *delimiter,
637  ssize_t delimiterlength,
638  bool collapse,
639  char ***list,
640  uint64_t *listlength);
641 
649  static void split(const char *string,
650  const char *delimiter,
651  ssize_t delimiterlength,
652  bool collapse,
653  char ***list,
654  uint64_t *listlength);
662  static void split(const char *string,
663  ssize_t stringlength,
664  const char *delimiter,
665  bool collapse,
666  char ***list,
667  uint64_t *listlength);
668 
676  static void split(const char *string,
677  const char *delimiter,
678  bool collapse,
679  char ***list,
680  uint64_t *listlength);
681 
685  static char *subString(const char *str,
686  size_t start, size_t end);
687 
691  static char *subString(const char *str, size_t start);
692 
693  #include <rudiments/private/charstring.h>
694 };
695 
696 #ifdef RUDIMENTS_NAMESPACE
697 }
698 #endif
699 
700 #endif