Rudiments
charstring.h
1 // Copyright (c) 1999-2018 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 
16 class RUDIMENTS_DLLSPEC charstring {
17  public:
18 
20  static size_t length(const char *string);
21 
23  static size_t length(const unsigned char *string);
24 
26  static bool isNullOrEmpty(const char *string);
27 
29  static bool isNullOrEmpty(const unsigned char *string);
30 
38  static bool isYes(const char *string);
39 
46  static bool isNo(const char *string);
47 
49  static void zero(char *str, size_t size);
50 
54  static char *append(char *dest, const char *source);
55 
59  static char *append(char *dest, const char *source,
60  size_t size);
61 
65  static char *append(char *dest, int64_t number);
66 
70  static char *append(char *dest, uint64_t number);
71 
75  static char *append(char *dest, double number);
76 
81  static char *append(char *dest, double number,
82  uint16_t scale);
83 
88  static char *append(char *dest, double number,
89  uint16_t precision,
90  uint16_t scale);
91 
95  static char *copy(char *dest, const char *source);
96 
100  static char *copy(char *dest,
101  const char *source, size_t size);
102 
107  static char *copy(char *dest, size_t location,
108  const char *source);
109 
114  static char *copy(char *dest, size_t location,
115  const char *source, size_t size);
116 
121  static char *safeCopy(char *dest, size_t destsize,
122  const char *source);
123 
128  static char *safeCopy(char *dest, size_t destsize,
129  const char *source, size_t sourcesize);
130 
133  static int32_t compare(const char *str1, const char *str2);
134 
137  static int32_t compare(const char *str1, const char *str2,
138  size_t size);
139 
142  static int32_t compareIgnoringCase(const char *str1,
143  const char *str2);
144 
148  static int32_t compareIgnoringCase(const char *str1,
149  const char *str2,
150  size_t size);
151 
156  static bool inSet(const char *str, const char * const *set);
157 
162  static bool inSetIgnoringCase(const char *str,
163  const char * const *set);
164 
167  static bool contains(const char *haystack,
168  const char *needle);
169 
172  static bool contains(const char *haystack, char needle);
173 
176  static const char *findFirst(const char *haystack,
177  const char *needle);
178 
181  static const char *findFirst(const char *haystack,
182  char needle);
183 
187  static const char *findFirstOrEnd(const char *haystack,
188  char needle);
189 
193  static const char *findFirstOrEnd(const char *haystack,
194  const char *needle);
195 
198  static const char *findLast(const char *haystack,
199  const char *needle);
200 
203  static const char *findLast(const char *haystack,
204  char needle);
205 
208  static char *findFirst(char *haystack, const char *needle);
209 
212  static char *findFirst(char *haystack, char needle);
213 
217  static char *findFirstOrEnd(char *haystack,
218  const char *needle);
219 
222  static char *findLast(char *haystack, const char *needle);
223 
226  static char *findLast(char *haystack, char needle);
227 
231  static const char *findFirstOfSet(const char *haystack,
232  const char *set);
233 
237  static char *findFirstOfSet(char *haystack,
238  const char *set);
239 
244  static const char *findFirstOfSetOrEnd(
245  const char *haystack,
246  const char *set);
247 
252  static char *findFirstOfSetOrEnd(
253  char *haystack,
254  const char *set);
255 
259  static const char *findLastOfSet(const char *haystack,
260  const char *set);
261 
265  static char *findLastOfSet(char *haystack,
266  const char *set);
267 
272  static const char *findLastOfSetOrEnd(
273  const char *haystack,
274  const char *set);
275 
280  static char *findLastOfSetOrEnd(
281  char *haystack,
282  const char *set);
283 
288  static char *before(const char *str,
289  const char *delimiter);
290 
295  static char *between(const char *str,
296  const char *start,
297  const char *end);
298 
304  static char *after(const char *str,
305  const char *delimiter);
306 
310  static size_t lengthContainingSet(const char *haystack,
311  const char *set);
312 
316  static size_t lengthNotContainingSet(const char *haystack,
317  const char *set);
318 
323  static char *duplicate(const char *str);
324 
330  static char *duplicate(const char *str, size_t length);
331 
333  static void upper(char *str);
334 
336  static void lower(char *str);
337 
340  static void capitalize(char *str);
341 
343  static void rightTrim(char *str);
344 
347  static void rightTrim(char *str, char character);
348 
350  static void leftTrim(char *str);
351 
354  static void leftTrim(char *str, char character);
355 
357  static void bothTrim(char *str);
358 
360  static void bothTrim(char *str, char character);
361 
365  static bool strip(char *str, char character);
366 
370  static bool strip(char *str1, const char *str2);
371 
375  static bool stripSet(char *str1, const char *set);
376 
379  static void replace(char *str,
380  char oldchar, char newchar);
381 
384  static void replace(char *str,
385  const char *oldchars, char newchar);
386 
390  static char *replace(const char *str,
391  const char *oldstr,
392  const char *newstr);
393 
400  static char *replace(const char *str,
401  const char * const *oldstrset,
402  ssize_t *oldstrlen,
403  const char * const *newstrset);
404 
411  static char *replace(const char *str,
412  regularexpression *from,
413  const char *to,
414  bool global);
415 
418  static uint16_t integerLength(int16_t number);
419 
422  static uint16_t integerLength(int32_t number);
423 
426  static uint16_t integerLength(int64_t number);
427 
430  static uint16_t integerLength(uint16_t number);
431 
434  static uint16_t integerLength(uint32_t number);
435 
438  static uint16_t integerLength(uint64_t number);
439 
442  static bool isInteger(const char *val);
443 
446  static bool isInteger(const char *val, int32_t size);
447 
450  static bool isNumber(const char *val);
451 
454  static bool isNumber(const char *val, int32_t size);
455 
459  static char *parseNumber(int16_t number);
460 
464  static char *parseNumber(uint16_t number);
465 
469  static char *parseNumber(int16_t number,
470  uint16_t zeropadding);
471 
475  static char *parseNumber(uint16_t number,
476  uint16_t zeropadding);
477 
481  static char *parseNumber(int32_t number);
482 
486  static char *parseNumber(uint32_t number);
487 
491  static char *parseNumber(int32_t number,
492  uint16_t zeropadding);
493 
497  static char *parseNumber(uint32_t number,
498  uint16_t zeropadding);
499 
503  static char *parseNumber(int64_t number);
504 
508  static char *parseNumber(uint64_t number);
509 
513  static char *parseNumber(int64_t number,
514  uint16_t zeropadding);
515 
519  static char *parseNumber(uint64_t number,
520  uint16_t zeropadding);
521 
522 
526  static char *parseNumber(float number);
527 
531  static char *parseNumber(float number,
532  uint16_t scale);
533 
537  static char *parseNumber(float number,
538  uint16_t precision,
539  uint16_t scale);
540 
544  static char *parseNumber(double number);
545 
549  static char *parseNumber(double number,
550  uint16_t scale);
551 
555  static char *parseNumber(double number,
556  uint16_t precision,
557  uint16_t scale);
558 
562  static char *parseNumber(long double number);
563 
567  static char *parseNumber(long double number,
568  uint16_t scale);
569 
573  static char *parseNumber(long double number,
574  uint16_t precision,
575  uint16_t scale);
576 
578  static int64_t toInteger(const char *string);
579 
583  static int64_t toInteger(const char *string,
584  const char **endptr);
585 
587  static int64_t toInteger(const char *string, int32_t base);
588 
592  static int64_t toInteger(const char *string,
593  const char **endptr, int32_t base);
594 
596  static uint64_t toUnsignedInteger(const char *string);
597 
601  static uint64_t toUnsignedInteger(const char *string,
602  const char **endptr);
603 
606  static uint64_t toUnsignedInteger(const char *string,
607  int32_t base);
608 
613  static uint64_t toUnsignedInteger(const char *string,
614  const char **endptr,
615  int32_t base);
616 
617 
619  static long double toFloat(const char *string);
620 
631  static long double toFloatC(const char *string);
632 
636  static long double toFloat(const char *string,
637  const char **endptr);
638 
641  static int64_t convertAmount(const char *amount);
642 
645  static char *convertAmount(int64_t amount);
646 
652  static char *convertAmount(int64_t amount,
653  uint16_t padding);
654 
655 
659  static char *httpEscape(const char *input);
660 
664  static char *httpUnescape(const char *input);
665 
670  static char *escape(const char *input,
671  const char *characters);
672 
677  static char *unescape(const char *input);
678 
682  static void escape(const char *input, uint64_t inputsize,
683  char **output, uint64_t *outputsize,
684  const char *characters);
685 
689  static void unescape(const char *input, uint64_t inputsize,
690  char **output, uint64_t *outputsize);
691 
695  static char *base64Encode(const unsigned char *input);
696 
699  static char *base64Encode(const unsigned char *input,
700  uint64_t inputsize);
701 
705  static void base64Encode(const unsigned char *input,
706  uint64_t inputsize,
707  char **output,
708  uint64_t *outputsize);
709 
713  static unsigned char *base64Decode(const char *input);
714 
717  static unsigned char *base64Decode(const char *input,
718  uint64_t inputsize);
719 
723  static void base64Decode(const char *input,
724  uint64_t inputsize,
725  unsigned char **output,
726  uint64_t *outputsize);
727 
731  static char *hexEncode(const unsigned char *input);
732 
735  static char *hexEncode(const unsigned char *input,
736  uint64_t inputsize);
737 
741  static void hexEncode(const unsigned char *input,
742  uint64_t inputsize,
743  char **output,
744  uint64_t *outputsize);
745 
749  static unsigned char *hexDecode(const char *input);
750 
753  static unsigned char *hexDecode(const char *input,
754  uint64_t inputsize);
755 
759  static void hexDecode(const char *input,
760  uint64_t inputsize,
761  unsigned char **output,
762  uint64_t *outputsize);
763 
765  static void obfuscate(char *str);
766 
769  static void deobfuscate(char *str);
770 
775  static void leftJustify(char *str, int32_t length);
776 
781  static void rightJustify(char *str, int32_t length);
782 
786  static void center(char *str, int32_t length);
787 
793  static char *pad(const char *string,
794  char padchar,
795  int16_t direction,
796  uint64_t totallength);
797 
805  static void split(const char *string,
806  ssize_t stringlength,
807  const char *delimiter,
808  ssize_t delimiterlength,
809  bool collapse,
810  char ***list,
811  uint64_t *listlength);
812 
820  static void split(const char *string,
821  const char *delimiter,
822  ssize_t delimiterlength,
823  bool collapse,
824  char ***list,
825  uint64_t *listlength);
833  static void split(const char *string,
834  ssize_t stringlength,
835  const char *delimiter,
836  bool collapse,
837  char ***list,
838  uint64_t *listlength);
839 
847  static void split(const char *string,
848  const char *delimiter,
849  bool collapse,
850  char ***list,
851  uint64_t *listlength);
852 
856  static char *subString(const char *str,
857  size_t start, size_t end);
858 
862  static char *subString(const char *str, size_t start);
863 
866  static char *insertString(const char *dest,
867  const char *src,
868  uint64_t index);
869 
887  static ssize_t printf(char *buffer, size_t length,
888  const char *format, ...);
889 
910  static ssize_t printf(char *buffer, size_t length,
911  const char *format,
912  va_list *argp);
913 
925  static ssize_t printf(char **buffer,
926  const char *format, ...);
927 
939  static ssize_t printf(char **buffer,
940  const char *format,
941  va_list *argp);
942 
943  #include <rudiments/private/charstring.h>
944 };
945 
946 #endif
Definition: charstring.h:16
Definition: input.h:9
Definition: character.h:11
Definition: regularexpression.h:14
Definition: output.h:9