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 
00097                 static  int32_t compare(const char *str1, const char *str2);
00098 
00101                 static  int32_t compare(const char *str1, const char *str2,
00102                                                                 size_t size);
00103 
00106                 static  int32_t compareIgnoringCase(const char *str1,
00107                                                         const char *str2);
00108 
00112                 static  int32_t compareIgnoringCase(const char *str1,
00113                                                         const char *str2,
00114                                                         size_t size);
00115 
00118                 static  bool    contains(const char *haystack,
00119                                                         const char *needle);
00120 
00123                 static  bool    contains(const char *haystack, char needle);
00124 
00127                 static  const char      *findFirst(const char *haystack,
00128                                                         const char *needle);
00129 
00132                 static  const char      *findFirst(const char *haystack,
00133                                                         char needle);
00134 
00138                 static  const char      *findFirstOrEnd(const char *haystack,
00139                                                         char needle);
00140 
00144                 static  const char      *findFirstOrEnd(const char *haystack,
00145                                                         const char *needle);
00146 
00149                 static  const char      *findLast(const char *haystack,
00150                                                         const char *needle);
00151 
00154                 static  const char      *findLast(const char *haystack,
00155                                                         char needle);
00156 
00159                 static  char    *findFirst(char *haystack, const char *needle);
00160 
00163                 static  char    *findFirst(char *haystack, char needle);
00164 
00168                 static  char    *findFirstOrEnd(char *haystack,
00169                                                         const char *needle);
00170 
00173                 static  char    *findLast(char *haystack, const char *needle);
00174 
00177                 static  char    *findLast(char *haystack, char needle);
00178 
00182                 static const char       *findFirstOfSet(const char *haystack,
00183                                                         const char *set);
00184 
00188                 static char             *findFirstOfSet(char *haystack,
00189                                                         const char *set);
00190 
00195                 static const char       *findFirstOfSetOrEnd(
00196                                                         const char *haystack,
00197                                                         const char *set);
00198 
00203                 static char             *findFirstOfSetOrEnd(
00204                                                         char *haystack,
00205                                                         const char *set);
00206 
00210                 static size_t   lengthContainingSet(const char *haystack,
00211                                                         const char *set);
00212 
00216                 static size_t   lengthNotContainingSet(const char *haystack,
00217                                                         const char *set);
00218 
00223                 static  char    *duplicate(const char *str);
00224 
00230                 static  char    *duplicate(const char *str, size_t length);
00231 
00233                 static  void    upper(char *str); 
00234 
00236                 static  void    lower(char *str); 
00237 
00240                 static void     capitalize(char *str);
00241 
00243                 static  void    rightTrim(char *str);
00244 
00247                 static  void    rightTrim(char *str, char character);
00248 
00250                 static  void    leftTrim(char *str);
00251 
00254                 static  void    leftTrim(char *str, char character);
00255 
00257                 static  void    bothTrim(char *str);
00258 
00260                 static  void    bothTrim(char *str, char character);
00261 
00263                 static  void    strip(char *str, char character);
00264 
00266                 static  void    strip(char *str1, const char *str2);
00267 
00270                 static  void    replace(char *str,
00271                                         char oldchar, char newchar);
00272 
00275                 static  void    replace(char *str,
00276                                         const char *oldchars, char newchar);
00277 
00280                 static  uint16_t        integerLength(int16_t number);
00281 
00284                 static  uint16_t        integerLength(int32_t number);
00285 
00288                 static  uint16_t        integerLength(int64_t number);
00289 
00292                 static  uint16_t        integerLength(uint16_t number);
00293 
00296                 static  uint16_t        integerLength(uint32_t number);
00297 
00300                 static  uint16_t        integerLength(uint64_t number);
00301 
00304                 static  bool    isInteger(const char *val);
00305 
00308                 static  bool    isInteger(const char *val, int32_t size);
00309 
00312                 static  bool    isNumber(const char *val);
00313 
00316                 static  bool    isNumber(const char *val, int32_t size);
00317 
00321                 static  char    *parseNumber(int16_t number);
00322 
00326                 static  char    *parseNumber(uint16_t number);
00327 
00331                 static  char    *parseNumber(int16_t number,
00332                                                 uint16_t zeropadding);
00333 
00337                 static  char    *parseNumber(uint16_t number,
00338                                                 uint16_t zeropadding);
00339 
00343                 static  char    *parseNumber(int32_t number);
00344 
00348                 static  char    *parseNumber(uint32_t number);
00349 
00353                 static  char    *parseNumber(int32_t number,
00354                                                 uint16_t zeropadding);
00355 
00359                 static  char    *parseNumber(uint32_t number,
00360                                                 uint16_t zeropadding);
00361 
00365                 static  char    *parseNumber(int64_t number);
00366 
00370                 static  char    *parseNumber(uint64_t number);
00371 
00375                 static  char    *parseNumber(int64_t number,
00376                                                 uint16_t zeropadding);
00377 
00381                 static  char    *parseNumber(uint64_t number,
00382                                                 uint16_t zeropadding);
00383 
00384 
00388                 static  char    *parseNumber(float number);
00389 
00393                 static  char    *parseNumber(float number,
00394                                                 uint16_t scale);
00395 
00399                 static  char    *parseNumber(float number,
00400                                                 uint16_t precision,
00401                                                 uint16_t scale);
00402 
00406                 static  char    *parseNumber(double number);
00407 
00411                 static  char    *parseNumber(double number,
00412                                                 uint16_t scale);
00413 
00417                 static  char    *parseNumber(double number,
00418                                                 uint16_t precision,
00419                                                 uint16_t scale);
00420 
00424                 static  char    *parseNumber(long double number);
00425 
00429                 static  char    *parseNumber(long double number,
00430                                                 uint16_t scale);
00431 
00435                 static  char    *parseNumber(long double number,
00436                                                 uint16_t precision,
00437                                                 uint16_t scale);
00438 
00440                 static  int64_t toInteger(const char *string);
00441 
00445                 static  int64_t toInteger(const char *string, char **endptr);
00446 
00448                 static  int64_t toInteger(const char *string, int32_t base);
00449 
00453                 static  int64_t toInteger(const char *string,
00454                                         char **endptr, int32_t base);
00455 
00457                 static  uint64_t        toUnsignedInteger(const char *string);
00458 
00462                 static  uint64_t        toUnsignedInteger(const char *string,
00463                                                         char **endptr);
00464 
00467                 static  uint64_t        toUnsignedInteger(const char *string,
00468                                                                 int32_t base);
00469 
00474                 static  uint64_t        toUnsignedInteger(const char *string,
00475                                                         char **endptr,
00476                                                         int32_t base);
00477 
00478 
00480                 static  long double     toFloat(const char *string);
00481 
00485                 static  long double     toFloat(const char *string,
00486                                                         char **endptr);
00487 
00488 
00492                 static  char    *httpEscape(const char *input);
00493 
00497                 static  char    *httpUnescape(const char *input);
00498 
00503                 static  char    *escape(const char *input,
00504                                         const char *characters);
00505 
00510                 static  char    *unescape(const char *input);
00511 
00515                 static  void    escape(const char *input, uint64_t inputsize,
00516                                         char **output, uint64_t *outputsize,
00517                                         const char *characters);
00518 
00522                 static  void    unescape(const char *input, uint64_t inputsize,
00523                                         char **output, uint64_t *outputsize);
00524 
00528                 static  char    *base64Encode(const unsigned char *input);
00529 
00532                 static  char    *base64Encode(const unsigned char *input,
00533                                                 uint64_t inputsize);
00534 
00538                 static  void    base64Encode(const unsigned char *input,
00539                                                 uint64_t inputsize,
00540                                                 char **output,
00541                                                 uint64_t *outputsize);
00542 
00546                 static  unsigned char   *base64Decode(const char *input);
00547 
00550                 static  unsigned char   *base64Decode(const char *input,
00551                                                         uint64_t inputsize);
00552 
00556                 static  void    base64Decode(const char *input,
00557                                                 uint64_t inputsize,
00558                                                 unsigned char **output,
00559                                                 uint64_t *outputsize);
00560 
00565                 static  void    leftJustify(char *str, int32_t length);
00566 
00577                 static  void    rightPad(char *str, int32_t lngth,
00578                                         char padchar, bool fill);
00579 
00584                 static  void    rightJustify(char *str, int32_t length);
00585 
00589                 static  void    center(char *str, int32_t length);
00590 
00595                 static void     safePrint(const char *str);
00596 
00598                 static void     safePrint(const char *str, int32_t length);
00599 
00600                 // Prints "value" as a string of ones and zeros.
00601                 static void     printBits(unsigned char value);
00602 
00603                 // Prints "value" as a string of ones and zeros.
00604                 static void     printBits(uint16_t value);
00605 
00606                 // Prints "value" as a string of ones and zeros.
00607                 static void     printBits(uint32_t value);
00608 
00609                 // Prints "value" as a string of ones and zeros.
00610                 static void     printBits(uint64_t value);
00611 
00612                 // Prints "value" as a string of ones and zeros.
00613                 static void     printBits(char value);
00614 
00615                 // Prints "value" as a string of ones and zeros.
00616                 static void     printBits(int16_t value);
00617 
00618                 // Prints "value" as a string of ones and zeros.
00619                 static void     printBits(int32_t value);
00620 
00621                 // Prints "value" as a string of ones and zeros.
00622                 static void     printBits(int64_t value);
00623 
00624                 // Prints "value" as a string of ones and zeros.
00625                 static void     printBits(unsigned char *bits, uint64_t size);
00626 
00634                 static void     split(const char *string,
00635                                         ssize_t stringlength,
00636                                         const char *delimiter,
00637                                         ssize_t delimiterlength,
00638                                         bool collapse,
00639                                         char ***list,
00640                                         uint64_t *listlength);
00641 
00649                 static void     split(const char *string,
00650                                         const char *delimiter,
00651                                         ssize_t delimiterlength,
00652                                         bool collapse,
00653                                         char ***list,
00654                                         uint64_t *listlength);
00662                 static void     split(const char *string,
00663                                         ssize_t stringlength,
00664                                         const char *delimiter,
00665                                         bool collapse,
00666                                         char ***list,
00667                                         uint64_t *listlength);
00668 
00676                 static void     split(const char *string,
00677                                         const char *delimiter,
00678                                         bool collapse,
00679                                         char ***list,
00680                                         uint64_t *listlength);
00681 
00685                 static char     *subString(const char *str,
00686                                                 size_t start, size_t end);
00687 
00691                 static char     *subString(const char *str, size_t start);
00692 
00693         #include <rudiments/private/charstring.h>
00694 };
00695 
00696 #ifdef RUDIMENTS_NAMESPACE
00697 }
00698 #endif
00699 
00700 #endif