From 9bff3fa82cb2763c885787b4f517c1b4429e77cb Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Tue, 2 Sep 2014 21:22:35 -0400 Subject: [PATCH] added long long equivalents to several int conversion functions. --- Jupiter/Functions.c | 161 +++++++++++++++++++++++++++++++++- Jupiter/Functions.h | 8 ++ Jupiter/Readable_String.h | 2 + Jupiter/Readable_String_Imp.h | 20 +++++ Release/Jupiter.lib | Bin 240918 -> 242782 bytes 5 files changed, 190 insertions(+), 1 deletion(-) diff --git a/Jupiter/Functions.c b/Jupiter/Functions.c index 7af4b52..4b17f85 100644 --- a/Jupiter/Functions.c +++ b/Jupiter/Functions.c @@ -598,12 +598,24 @@ int Jupiter_strtoi(const char *str, int base) return Jupiter_strtoi_nospace(str, base); } +long long Jupiter_strtoll(const char *str, int base) +{ + while (isspace(*str)) str++; + return Jupiter_strtoll_nospace(str, base); +} + unsigned int Jupiter_strtoui(const char *str, int base) { while (isspace(*str)) str++; return Jupiter_strtoui_nospace(str, base); } +unsigned long long Jupiter_strtoull(const char *str, int base) +{ + while (isspace(*str)) str++; + return Jupiter_strtoull_nospace(str, base); +} + double Jupiter_strtod(const char *str) { while (isspace(*str)) str++; @@ -616,6 +628,12 @@ int Jupiter_strtoi_nospace(const char *str, int base) return -1 * Jupiter_strtoui_nospace(++str, base); } +long long Jupiter_strtoll_nospace(const char *str, int base) +{ + if (*str != '-') return Jupiter_strtoull_nospace(str, base); + return -1 * Jupiter_strtoull_nospace(++str, base); +} + unsigned int Jupiter_strtoui_nospace(const char *str, int base) { unsigned int total = 0; @@ -666,6 +684,56 @@ unsigned int Jupiter_strtoui_nospace(const char *str, int base) return total; } +unsigned long long Jupiter_strtoull_nospace(const char *str, int base) +{ + unsigned long long total = 0; + int tval; + if (*str == '-') return Jupiter_strtoi_nospace(str, base); + + if (*str == '+') str++; + + if (base == 0) // Guess a base. + { + if (*str == '0') + { + str++; + switch (*str) + { + case 'X': + case 'x': + str++; + base = 16; + break; + case 'B': + case 'b': + str++; + base = 2; + break; + default: + base = 8; + break; + } + } + else base = 10; + } + else if (base == 16) // check for optional preceeding hexadecimal prefix. + { + if (*str == '0') + { + str++; + if (*str == 'x' || *str == 'X') str++; + } + } + + while ((tval = Jupiter_getBase(*str, base)) != -1) + { + total = base * total + tval; + str++; + } + + return total; +} + double Jupiter_strtod_nospace(const char *str) { const int base = 10; @@ -711,6 +779,16 @@ int Jupiter_strtoi_s(const char *str, size_t length, int base) return Jupiter_strtoi_nospace_s(str, length, base); } +long long Jupiter_strtoll_s(const char *str, size_t length, int base) +{ + while (length != 0 && isspace(*str)) + { + str++; + length--; + } + return Jupiter_strtoll_nospace_s(str, length, base); +} + unsigned int Jupiter_strtoui_s(const char *str, size_t length, int base) { while (length != 0 && isspace(*str)) @@ -721,6 +799,16 @@ unsigned int Jupiter_strtoui_s(const char *str, size_t length, int base) return Jupiter_strtoui_nospace_s(str, length, base); } +unsigned long long Jupiter_strtoull_s(const char *str, size_t length, int base) +{ + while (length != 0 && isspace(*str)) + { + str++; + length--; + } + return Jupiter_strtoull_nospace_s(str, length, base); +} + double Jupiter_strtod_s(const char *str, size_t length) { while (length != 0 && isspace(*str)) @@ -731,7 +819,7 @@ double Jupiter_strtod_s(const char *str, size_t length) return Jupiter_strtod_nospace_s(str, length); } -signed int Jupiter_strtoi_nospace_s(const char *str, size_t length, int base) +int Jupiter_strtoi_nospace_s(const char *str, size_t length, int base) { if (length == 0) return 0; if (*str != '-') return Jupiter_strtoui_nospace_s(str, length, base); @@ -802,6 +890,77 @@ unsigned int Jupiter_strtoui_nospace_s(const char *str, size_t length, int base) return total; } +long long Jupiter_strtoll_nospace_s(const char *str, size_t length, int base) +{ + if (length == 0) return 0; + if (*str != '-') return Jupiter_strtoull_nospace_s(str, length, base); + return -1 * Jupiter_strtoull_nospace_s(++str, --length, base); +} + +unsigned long long Jupiter_strtoull_nospace_s(const char *str, size_t length, int base) +{ + unsigned long long total = 0; + int tval; + if (length == 0) return total; + if (*str == '-') return Jupiter_strtoi_nospace(str, base); + + if (*str == '+') + { + if (--length == 0) return total; + str++; + } + + if (base == 0) // Guess a base. + { + if (*str == '0') + { + if (--length == 0) return total; + str++; + switch (*str) + { + case 'X': + case 'x': + if (--length == 0) return total; + str++; + base = 16; + break; + case 'B': + case 'b': + if (--length == 0) return total; + str++; + base = 2; + break; + default: + base = 8; + break; + } + } + else base = 10; + } + else if (base == 16) // check for optional preceeding hexadecimal prefix. + { + if (*str == '0') + { + if (--length == 0) return total; + str++; + if (*str == 'x' || *str == 'X') + { + if (--length == 0) return total; + str++; + } + } + } + + while ((tval = Jupiter_getBase(*str, base)) != -1) + { + total = base * total + tval; + if (--length == 0) return total; + str++; + } + + return total; +} + double Jupiter_strtod_nospace_s(const char *str, size_t length) { const int base = 10; diff --git a/Jupiter/Functions.h b/Jupiter/Functions.h index 39548d2..66bf489 100644 --- a/Jupiter/Functions.h +++ b/Jupiter/Functions.h @@ -355,7 +355,9 @@ JUPITER_API int Jupiter_getBase(unsigned char c, int base); * @return Interpretation of the string as an integer on success, 0 otherwise. */ JUPITER_API int Jupiter_strtoi(const char *str, int base); +JUPITER_API long long Jupiter_strtoll(const char *str, int base); JUPITER_API unsigned int Jupiter_strtoui(const char *str, int base); +JUPITER_API unsigned long long Jupiter_strtoull(const char *str, int base); /** * @brief Interpets a string into a floating point decimal number. @@ -375,7 +377,9 @@ JUPITER_API double Jupiter_strtod(const char *str); * @return Interpretation of the string as an integer on success, 0 otherwise. */ JUPITER_API int Jupiter_strtoi_nospace(const char *str, int base); +JUPITER_API long long Jupiter_strtoll_nospace(const char *str, int base); JUPITER_API unsigned int Jupiter_strtoui_nospace(const char *str, int base); +JUPITER_API unsigned long long Jupiter_strtoull_nospace(const char *str, int base); /** * @brief Interpets a string into a floating point decimal number. @@ -396,7 +400,9 @@ JUPITER_API double Jupiter_strtod_nospace(const char *str); * @return Interpretation of the string as an integer on success, 0 otherwise. */ JUPITER_API int Jupiter_strtoi_s(const char *str, size_t length, int base); +JUPITER_API long long Jupiter_strtoll_s(const char *str, size_t length, int base); JUPITER_API unsigned int Jupiter_strtoui_s(const char *str, size_t length, int base); +JUPITER_API unsigned long long Jupiter_strtoull_s(const char *str, size_t length, int base); /** * @brief Interpets a string into a floating point decimal number. @@ -417,7 +423,9 @@ JUPITER_API double Jupiter_strtod_s(const char *str, size_t length); * @return Interpretation of the string as an integer on success, 0 otherwise. */ JUPITER_API int Jupiter_strtoi_nospace_s(const char *str, size_t length, int base); +JUPITER_API long long Jupiter_strtoll_nospace_s(const char *str, size_t length, int base); JUPITER_API unsigned int Jupiter_strtoui_nospace_s(const char *str, size_t length, int base); +JUPITER_API unsigned long long Jupiter_strtoull_nospace_s(const char *str, size_t length, int base); /** * @brief Interpets a string into a floating point decimal number. diff --git a/Jupiter/Readable_String.h b/Jupiter/Readable_String.h index 570a9d7..e5f31e5 100644 --- a/Jupiter/Readable_String.h +++ b/Jupiter/Readable_String.h @@ -204,7 +204,9 @@ namespace Jupiter * @return Integer representation of the string. */ int asInt(int base = 0) const; + long long asLongLong(int base = 0) const; unsigned int asUnsignedInt(int base = 0) const; + unsigned long long asUnsignedLongLong(int base = 0) const; /** * @brief Interprets the string as a floating-point decimal number. diff --git a/Jupiter/Readable_String_Imp.h b/Jupiter/Readable_String_Imp.h index 607d693..4607b9c 100644 --- a/Jupiter/Readable_String_Imp.h +++ b/Jupiter/Readable_String_Imp.h @@ -878,6 +878,16 @@ template int Jupiter::Readable_String::asInt(int base) const return 0; } +template<> long long inline Jupiter::Readable_String::asLongLong(int base) const +{ + return Jupiter_strtoll_s(this->ptr(), this->size(), base); +} + +template long long Jupiter::Readable_String::asLongLong(int base) const +{ + return 0; +} + template<> unsigned int inline Jupiter::Readable_String::asUnsignedInt(int base) const { return Jupiter_strtoui_s(this->ptr(), this->size(), base); @@ -888,6 +898,16 @@ template unsigned int Jupiter::Readable_String::asUnsignedInt(int return 0; } +template<> unsigned long long inline Jupiter::Readable_String::asUnsignedLongLong(int base) const +{ + return Jupiter_strtoull_s(this->ptr(), this->size(), base); +} + +template unsigned long long Jupiter::Readable_String::asUnsignedLongLong(int base) const +{ + return 0; +} + template<> double inline Jupiter::Readable_String::asDouble() const { return Jupiter_strtod_s(this->ptr(), this->size()); diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index a4cb876ad12176700c49d57df2281a7d9192bbd3..918c4802cbcd1d836543c338eaa9537dfc84e41f 100644 GIT binary patch delta 31279 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 v0$0%Jk62y!5*`U<`;$;BO|5M#uO~?Hupq0#gE* delta 30512 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 TxvBlM