Rudiments
/home/dmuse/src/rudiments/include/rudiments/charstring.h
00001 // Copyright (c) 2003 David Muse
00002 // See the COPYING file for more information.
00003 
00004 #ifndef RUDIMENTS_CHARSTRING_H
00005 #define RUDIMENTS_CHARSTRING_H
00006 
00007 #include <rudiments/private/charstringincludes.h>
00008 
00009 #ifdef RUDIMENTS_NAMESPACE
00010 namespace rudiments {
00011 #endif
00012 
00017 class RUDIMENTS_DLLSPEC charstring {
00018         public:
00019 
00021                 static  size_t  length(const char *string);
00022 
00024                 static  size_t  length(const unsigned char *string);
00025 
00027                 static  void    zero(char *str, size_t size);
00028 
00032                 static  char    *append(char *dest, const char *source);
00033 
00037                 static  char    *append(char *dest, const char *source,
00038                                                                 size_t size);
00039 
00043                 static  char    *append(char *dest, int64_t number);
00044 
00048                 static  char    *append(char *dest, uint64_t number);
00049 
00053                 static  char    *append(char *dest, double number);
00054 
00059                 static  char    *append(char *dest, double number,
00060                                                         uint16_t scale);
00061 
00066                 static  char    *append(char *dest, double number,
00067                                                 uint16_t precision,
00068                                                 uint16_t scale);
00069 
00073                 static  char    *copy(char *dest, const char *source);
00074 
00078                 static  char    *copy(char *dest,
00079                                         const char *source, size_t size);
00080 
00085                 static  char    *copy(char *dest, size_t location,
00086                                                 const char *source);
00087 
00092                 static  char    *copy(char *dest, size_t location,
00093                                         const char *source, size_t size);
00094 
00099                 static char     *safeCopy(char *dest, size_t destsize,
00100                                                         const char *source);
00101 
00106                 static char     *safeCopy(char *dest, size_t destsize,
00107                                         const char *source, size_t sourcesize);
00108 
00111                 static  int32_t compare(const char *str1, const char *str2);
00112 
00115                 static  int32_t compare(const char *str1, const char *str2,
00116                                                                 size_t size);
00117 
00120                 static  int32_t compareIgnoringCase(const char *str1,
00121                                                         const char *str2);
00122 
00126                 static  int32_t compareIgnoringCase(const char *str1,
00127                                                         const char *str2,
00128                                                         size_t size);
00129 
00132                 static  bool    contains(const char *haystack,
00133                                                         const char *needle);
00134 
00137                 static  bool    contains(const char *haystack, char needle);
00138 
00141                 static  const char      *findFirst(const char *haystack,
00142                                                         const char *needle);
00143 
00146                 static  const char      *findFirst(const char *haystack,
00147                                                         char needle);
00148 
00152                 static  const char      *findFirstOrEnd(const char *haystack,
00153                                                         char needle);
00154 
00158                 static  const char      *findFirstOrEnd(const char *haystack,
00159                                                         const char *needle);
00160 
00163                 static  const char      *findLast(const char *haystack,
00164                                                         const char *needle);
00165 
00168                 static  const char      *findLast(const char *haystack,
00169                                                         char needle);
00170 
00173                 static  char    *findFirst(char *haystack, const char *needle);
00174 
00177                 static  char    *findFirst(char *haystack, char needle);
00178 
00182                 static  char    *findFirstOrEnd(char *haystack,
00183                                                         const char *needle);
00184 
00187                 static  char    *findLast(char *haystack, const char *needle);
00188 
00191                 static  char    *findLast(char *haystack, char needle);
00192 
00196                 static const char       *findFirstOfSet(const char *haystack,
00197                                                         const char *set);
00198 
00202                 static char             *findFirstOfSet(char *haystack,
00203                                                         const char *set);
00204 
00209                 static const char       *findFirstOfSetOrEnd(
00210                                                         const char *haystack,
00211                                                         const char *set);
00212 
00217                 static char             *findFirstOfSetOrEnd(
00218                                                         char *haystack,
00219                                                         const char *set);
00220 
00224                 static size_t   lengthContainingSet(const char *haystack,
00225                                                         const char *set);
00226 
00230                 static size_t   lengthNotContainingSet(const char *haystack,
00231                                                         const char *set);
00232 
00237                 static  char    *duplicate(const char *str);
00238 
00244                 static  char    *duplicate(const char *str, size_t length);
00245 
00247                 static  void    upper(char *str); 
00248 
00250                 static  void    lower(char *str); 
00251 
00254                 static void     capitalize(char *str);
00255 
00257                 static  void    rightTrim(char *str);
00258 
00261                 static  void    rightTrim(char *str, char character);
00262 
00264                 static  void    leftTrim(char *str);
00265 
00268                 static  void    leftTrim(char *str, char character);
00269 
00271                 static  void    bothTrim(char *str);
00272 
00274                 static  void    bothTrim(char *str, char character);
00275 
00277                 static  void    strip(char *str, char character);
00278 
00280                 static  void    strip(char *str1, const char *str2);
00281 
00284                 static  void    replace(char *str,
00285                                         char oldchar, char newchar);
00286 
00289                 static  void    replace(char *str,
00290                                         const char *oldchars, char newchar);
00291 
00294                 static  uint16_t        integerLength(int16_t number);
00295 
00298                 static  uint16_t        integerLength(int32_t number);
00299 
00302                 static  uint16_t        integerLength(int64_t number);
00303 
00306                 static  uint16_t        integerLength(uint16_t number);
00307 
00310                 static  uint16_t        integerLength(uint32_t number);
00311 
00314                 static  uint16_t        integerLength(uint64_t number);
00315 
00318                 static  bool    isInteger(const char *val);
00319 
00322                 static  bool    isInteger(const char *val, int32_t size);
00323 
00326                 static  bool    isNumber(const char *val);
00327 
00330                 static  bool    isNumber(const char *val, int32_t size);
00331 
00335                 static  char    *parseNumber(int16_t number);
00336 
00340                 static  char    *parseNumber(uint16_t number);
00341 
00345                 static  char    *parseNumber(int16_t number,
00346                                                 uint16_t zeropadding);
00347 
00351                 static  char    *parseNumber(uint16_t number,
00352                                                 uint16_t zeropadding);
00353 
00357                 static  char    *parseNumber(int32_t number);
00358 
00362                 static  char    *parseNumber(uint32_t number);
00363 
00367                 static  char    *parseNumber(int32_t number,
00368                                                 uint16_t zeropadding);
00369 
00373                 static  char    *parseNumber(uint32_t number,
00374                                                 uint16_t zeropadding);
00375 
00379                 static  char    *parseNumber(int64_t number);
00380 
00384                 static  char    *parseNumber(uint64_t number);
00385 
00389                 static  char    *parseNumber(int64_t number,
00390                                                 uint16_t zeropadding);
00391 
00395                 static  char    *parseNumber(uint64_t number,
00396                                                 uint16_t zeropadding);
00397 
00398 
00402                 static  char    *parseNumber(float number);
00403 
00407                 static  char    *parseNumber(float number,
00408                                                 uint16_t scale);
00409 
00413                 static  char    *parseNumber(float number,
00414                                                 uint16_t precision,
00415                                                 uint16_t scale);
00416 
00420                 static  char    *parseNumber(double number);
00421 
00425                 static  char    *parseNumber(double number,
00426                                                 uint16_t scale);
00427 
00431                 static  char    *parseNumber(double number,
00432                                                 uint16_t precision,
00433                                                 uint16_t scale);
00434 
00438                 static  char    *parseNumber(long double number);
00439 
00443                 static  char    *parseNumber(long double number,
00444                                                 uint16_t scale);
00445 
00449                 static  char    *parseNumber(long double number,
00450                                                 uint16_t precision,
00451                                                 uint16_t scale);
00452 
00454                 static  int64_t toInteger(const char *string);
00455 
00459                 static  int64_t toInteger(const char *string, char **endptr);
00460 
00462                 static  int64_t toInteger(const char *string, int32_t base);
00463 
00467                 static  int64_t toInteger(const char *string,
00468                                         char **endptr, int32_t base);
00469 
00471                 static  uint64_t        toUnsignedInteger(const char *string);
00472 
00476                 static  uint64_t        toUnsignedInteger(const char *string,
00477                                                         char **endptr);
00478 
00481                 static  uint64_t        toUnsignedInteger(const char *string,
00482                                                                 int32_t base);
00483 
00488                 static  uint64_t        toUnsignedInteger(const char *string,
00489                                                         char **endptr,
00490                                                         int32_t base);
00491 
00492 
00494                 static  long double     toFloat(const char *string);
00495 
00499                 static  long double     toFloat(const char *string,
00500                                                         char **endptr);
00501 
00504                 static  int64_t convertAmount(const char *amount);
00505 
00508                 static  char    *convertAmount(int64_t amount);
00509 
00515                 static  char    *convertAmount(int64_t amount,
00516                                                 uint16_t padding);
00517 
00518 
00522                 static  char    *httpEscape(const char *input);
00523 
00527                 static  char    *httpUnescape(const char *input);
00528 
00533                 static  char    *escape(const char *input,
00534                                         const char *characters);
00535 
00540                 static  char    *unescape(const char *input);
00541 
00545                 static  void    escape(const char *input, uint64_t inputsize,
00546                                         char **output, uint64_t *outputsize,
00547                                         const char *characters);
00548 
00552                 static  void    unescape(const char *input, uint64_t inputsize,
00553                                         char **output, uint64_t *outputsize);
00554 
00558                 static  char    *base64Encode(const unsigned char *input);
00559 
00562                 static  char    *base64Encode(const unsigned char *input,
00563                                                 uint64_t inputsize);
00564 
00568                 static  void    base64Encode(const unsigned char *input,
00569                                                 uint64_t inputsize,
00570                                                 char **output,
00571                                                 uint64_t *outputsize);
00572 
00576                 static  unsigned char   *base64Decode(const char *input);
00577 
00580                 static  unsigned char   *base64Decode(const char *input,
00581                                                         uint64_t inputsize);
00582 
00586                 static  void    base64Decode(const char *input,
00587                                                 uint64_t inputsize,
00588                                                 unsigned char **output,
00589                                                 uint64_t *outputsize);
00590 
00595                 static  void    leftJustify(char *str, int32_t length);
00596 
00607                 static  void    rightPad(char *str, int32_t lngth,
00608                                         char padchar, bool fill);
00609 
00614                 static  void    rightJustify(char *str, int32_t length);
00615 
00619                 static  void    center(char *str, int32_t length);
00620 
00625                 static void     safePrint(const char *str);
00626 
00628                 static void     safePrint(const char *str, int32_t length);
00629 
00630                 // Prints "value" as a string of ones and zeros.
00631                 static void     printBits(unsigned char value);
00632 
00633                 // Prints "value" as a string of ones and zeros.
00634                 static void     printBits(uint16_t value);
00635 
00636                 // Prints "value" as a string of ones and zeros.
00637                 static void     printBits(uint32_t value);
00638 
00639                 // Prints "value" as a string of ones and zeros.
00640                 static void     printBits(uint64_t value);
00641 
00642                 // Prints "value" as a string of ones and zeros.
00643                 static void     printBits(char value);
00644 
00645                 // Prints "value" as a string of ones and zeros.
00646                 static void     printBits(int16_t value);
00647 
00648                 // Prints "value" as a string of ones and zeros.
00649                 static void     printBits(int32_t value);
00650 
00651                 // Prints "value" as a string of ones and zeros.
00652                 static void     printBits(int64_t value);
00653 
00654                 // Prints "value" as a string of ones and zeros.
00655                 static void     printBits(unsigned char *bits, uint64_t size);
00656 
00664                 static void     split(const char *string,
00665                                         ssize_t stringlength,
00666                                         const char *delimiter,
00667                                         ssize_t delimiterlength,
00668                                         bool collapse,
00669                                         char ***list,
00670                                         uint64_t *listlength);
00671 
00679                 static void     split(const char *string,
00680                                         const char *delimiter,
00681                                         ssize_t delimiterlength,
00682                                         bool collapse,
00683                                         char ***list,
00684                                         uint64_t *listlength);
00692                 static void     split(const char *string,
00693                                         ssize_t stringlength,
00694                                         const char *delimiter,
00695                                         bool collapse,
00696                                         char ***list,
00697                                         uint64_t *listlength);
00698 
00706                 static void     split(const char *string,
00707                                         const char *delimiter,
00708                                         bool collapse,
00709                                         char ***list,
00710                                         uint64_t *listlength);
00711 
00715                 static char     *subString(const char *str,
00716                                                 size_t start, size_t end);
00717 
00721                 static char     *subString(const char *str, size_t start);
00722 
00725                 static char     *insertString(const char *dest,
00726                                                 const char *src,
00727                                                 uint64_t index);
00728 
00730                 static void     obfuscate(char *str);
00731 
00734                 static void     deobfuscate(char *str);
00735 
00741                 static char     *padString(const char *string,
00742                                                 char padchar,
00743                                                 int16_t direction,
00744                                                 uint64_t totallength);
00745 
00746         #include <rudiments/private/charstring.h>
00747 };
00748 
00749 #ifdef RUDIMENTS_NAMESPACE
00750 }
00751 #endif
00752 
00753 #endif