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