diff options
author | Kirill Volinsky <mataes2007@gmail.com> | 2012-12-17 14:19:09 +0000 |
---|---|---|
committer | Kirill Volinsky <mataes2007@gmail.com> | 2012-12-17 14:19:09 +0000 |
commit | d3a54e309c8c6335a5d6384d3e239bd7bc9390f6 (patch) | |
tree | d45e6ca446392d9ce9acf5b4b20e75dd5d85af4f /src/modules/json/NumberToString.h | |
parent | 375155f8dcd69863f1b9a220c5f890596844e99d (diff) |
cleanup
git-svn-id: http://svn.miranda-ng.org/main/trunk@2757 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'src/modules/json/NumberToString.h')
-rw-r--r-- | src/modules/json/NumberToString.h | 208 |
1 files changed, 104 insertions, 104 deletions
diff --git a/src/modules/json/NumberToString.h b/src/modules/json/NumberToString.h index 35c6c98d0a..cf81f2ef22 100644 --- a/src/modules/json/NumberToString.h +++ b/src/modules/json/NumberToString.h @@ -1,104 +1,104 @@ -#ifndef NUMBERTOSTRING_H -#define NUMBERTOSTRING_H - -#include "JSONDebug.h" -#include "JSONMemory.h" -#include <cstdio> - -static unsigned int getlen(unsigned int size){ - switch (size){ - case 1: - return 5; //3 digits for the number, plus null terminator and negation - case 2: - return 7; //5 digits for the number, plus null terminator and negation - case 4: - return 12; //10 digits for the number, plus null terminator and negation - case 8: - return 22; //20 digits for the number, plus null terminator and negation - } - JSON_ASSERT(size == 16, JSON_TEXT("template is not recognized 2^x in size")); - return 41; //39 digits for the number, plus null terminator and negation -} - -class NumberToString { -public: - template<typename T> - static json_string _itoa(T val, unsigned int size){ - long value = (long)val; - const unsigned int digits = getlen(size); - json_auto<json_char> result(digits); - result.ptr[digits - 1] = JSON_TEXT('\0'); //null terminator - json_char * runner = &result.ptr[digits - 2]; - bool negative; - - //first thing, check if it's negative, if so, make it positive - if (value < 0){ - value = -value; - negative = true; - } else { - negative = false; - } - - //create the string - do { - *runner--=(json_char)(value % 10) + JSON_TEXT('0'); - } while(value /= 10); - - //if it's negative, add the negation - json_string res; - if (negative){ - *runner = JSON_TEXT('-'); - res = runner; - } else { - res = runner + 1; - } - return res; - } - - #ifndef JSON_LIBRARY - template<typename T> - static json_string _uitoa(T val, unsigned int size){ - unsigned long value = val; - const unsigned int digits = getlen(size) - 1; //minus one because no '-' char - json_auto<json_char> result(digits); - result.ptr[digits - 1] = JSON_TEXT('\0'); //null terminator - json_char * runner = &result.ptr[digits - 2]; - - //create the string - do { - *runner--=(json_char)(value % 10) + JSON_TEXT('0'); - } while(value /= 10); - - json_string res = runner + 1; - return res; - } - #endif - - template<typename T> - static json_string _ftoa(T value){ - json_char result[64]; - #ifdef JSON_UNICODE - swprintf(result, 63, L"%f", value); - #else - snprintf(result, 63, "%f", value); - #endif - //strip the trailing zeros - for(json_char * pos = &result[0]; *pos; ++pos){ - if (*pos == '.') { //only care about after the decimal - for(json_char * runner = pos + 1; *runner; ++runner){ - if (*runner != JSON_TEXT('0')) pos = runner + 1; - } - *pos = JSON_TEXT('\0'); - break; - } - } - return result; - } - - static inline bool areEqual(const json_number & one, const json_number & two){ - const json_number temp = one - two; - return (temp > 0.0) ? temp < 0.00001 : temp > -0.00001; - } -}; - -#endif +#ifndef NUMBERTOSTRING_H
+#define NUMBERTOSTRING_H
+
+#include "JSONDebug.h"
+#include "JSONMemory.h"
+#include <cstdio>
+
+static unsigned int getlen(unsigned int size){
+ switch (size){
+ case 1:
+ return 5; //3 digits for the number, plus null terminator and negation
+ case 2:
+ return 7; //5 digits for the number, plus null terminator and negation
+ case 4:
+ return 12; //10 digits for the number, plus null terminator and negation
+ case 8:
+ return 22; //20 digits for the number, plus null terminator and negation
+ }
+ JSON_ASSERT(size == 16, JSON_TEXT("template is not recognized 2^x in size"));
+ return 41; //39 digits for the number, plus null terminator and negation
+}
+
+class NumberToString {
+public:
+ template<typename T>
+ static json_string _itoa(T val, unsigned int size){
+ long value = (long)val;
+ const unsigned int digits = getlen(size);
+ json_auto<json_char> result(digits);
+ result.ptr[digits - 1] = JSON_TEXT('\0'); //null terminator
+ json_char * runner = &result.ptr[digits - 2];
+ bool negative;
+
+ //first thing, check if it's negative, if so, make it positive
+ if (value < 0){
+ value = -value;
+ negative = true;
+ } else {
+ negative = false;
+ }
+
+ //create the string
+ do {
+ *runner--=(json_char)(value % 10) + JSON_TEXT('0');
+ } while(value /= 10);
+
+ //if it's negative, add the negation
+ json_string res;
+ if (negative){
+ *runner = JSON_TEXT('-');
+ res = runner;
+ } else {
+ res = runner + 1;
+ }
+ return res;
+ }
+
+ #ifndef JSON_LIBRARY
+ template<typename T>
+ static json_string _uitoa(T val, unsigned int size){
+ unsigned long value = val;
+ const unsigned int digits = getlen(size) - 1; //minus one because no '-' char
+ json_auto<json_char> result(digits);
+ result.ptr[digits - 1] = JSON_TEXT('\0'); //null terminator
+ json_char * runner = &result.ptr[digits - 2];
+
+ //create the string
+ do {
+ *runner--=(json_char)(value % 10) + JSON_TEXT('0');
+ } while(value /= 10);
+
+ json_string res = runner + 1;
+ return res;
+ }
+ #endif
+
+ template<typename T>
+ static json_string _ftoa(T value){
+ json_char result[64];
+ #ifdef JSON_UNICODE
+ swprintf(result, 63, L"%f", value);
+ #else
+ snprintf(result, 63, "%f", value);
+ #endif
+ //strip the trailing zeros
+ for(json_char * pos = &result[0]; *pos; ++pos){
+ if (*pos == '.') { //only care about after the decimal
+ for(json_char * runner = pos + 1; *runner; ++runner){
+ if (*runner != JSON_TEXT('0')) pos = runner + 1;
+ }
+ *pos = JSON_TEXT('\0');
+ break;
+ }
+ }
+ return result;
+ }
+
+ static inline bool areEqual(const json_number & one, const json_number & two){
+ const json_number temp = one - two;
+ return (temp > 0.0) ? temp < 0.00001 : temp > -0.00001;
+ }
+};
+
+#endif
|