Rudiments
|
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