| @@ -265,10 +265,31 @@ const String String::charToString (const tchar character) throw() | |||||
| } | } | ||||
| // pass in a pointer to the END of a buffer.. | // pass in a pointer to the END of a buffer.. | ||||
| static tchar* intToCharString (tchar* t, const int n) | |||||
| static tchar* int64ToCharString (tchar* t, const int64 n) throw() | |||||
| { | { | ||||
| int v = abs (n); | |||||
| *--t = 0; | *--t = 0; | ||||
| int64 v = (n >= 0) ? n : -n; | |||||
| do | |||||
| { | |||||
| *--t = (tchar) (T('0') + (int) (v % 10)); | |||||
| v /= 10; | |||||
| } while (v > 0); | |||||
| if (n < 0) | |||||
| *--t = T('-'); | |||||
| return t; | |||||
| } | |||||
| static tchar* intToCharString (tchar* t, const int n) throw() | |||||
| { | |||||
| if (n == 0x80000000) // (would cause an overflow) | |||||
| return int64ToCharString (t, n); | |||||
| *--t = 0; | |||||
| int v = abs (n); | |||||
| do | do | ||||
| { | { | ||||
| @@ -283,7 +304,7 @@ static tchar* intToCharString (tchar* t, const int n) | |||||
| return t; | return t; | ||||
| } | } | ||||
| static tchar* uintToCharString (tchar* t, unsigned int v) | |||||
| static tchar* uintToCharString (tchar* t, unsigned int v) throw() | |||||
| { | { | ||||
| *--t = 0; | *--t = 0; | ||||
| @@ -299,8 +320,8 @@ static tchar* uintToCharString (tchar* t, unsigned int v) | |||||
| String::String (const int number) throw() | String::String (const int number) throw() | ||||
| { | { | ||||
| tchar buffer [64]; | |||||
| tchar* const end = buffer + 64; | |||||
| tchar buffer [16]; | |||||
| tchar* const end = buffer + 16; | |||||
| const tchar* const t = intToCharString (end, number); | const tchar* const t = intToCharString (end, number); | ||||
| const int numChars = (int) (end - t); | const int numChars = (int) (end - t); | ||||
| @@ -310,8 +331,8 @@ String::String (const int number) throw() | |||||
| String::String (const unsigned int number) throw() | String::String (const unsigned int number) throw() | ||||
| { | { | ||||
| tchar buffer [64]; | |||||
| tchar* const end = buffer + 64; | |||||
| tchar buffer [16]; | |||||
| tchar* const end = buffer + 16; | |||||
| const tchar* const t = uintToCharString (end, number); | const tchar* const t = uintToCharString (end, number); | ||||
| const int numChars = (int) (end - t); | const int numChars = (int) (end - t); | ||||
| @@ -321,8 +342,8 @@ String::String (const unsigned int number) throw() | |||||
| String::String (const short number) throw() | String::String (const short number) throw() | ||||
| { | { | ||||
| tchar buffer [64]; | |||||
| tchar* const end = buffer + 64; | |||||
| tchar buffer [16]; | |||||
| tchar* const end = buffer + 16; | |||||
| const tchar* const t = intToCharString (end, (int) number); | const tchar* const t = intToCharString (end, (int) number); | ||||
| const int numChars = (int) (end - t); | const int numChars = (int) (end - t); | ||||
| @@ -332,8 +353,8 @@ String::String (const short number) throw() | |||||
| String::String (const unsigned short number) throw() | String::String (const unsigned short number) throw() | ||||
| { | { | ||||
| tchar buffer [64]; | |||||
| tchar* const end = buffer + 64; | |||||
| tchar buffer [16]; | |||||
| tchar* const end = buffer + 16; | |||||
| const tchar* const t = uintToCharString (end, (unsigned int) number); | const tchar* const t = uintToCharString (end, (unsigned int) number); | ||||
| const int numChars = (int) (end - t); | const int numChars = (int) (end - t); | ||||
| @@ -343,32 +364,19 @@ String::String (const unsigned short number) throw() | |||||
| String::String (const int64 number) throw() | String::String (const int64 number) throw() | ||||
| { | { | ||||
| tchar buffer [64]; | |||||
| tchar* const end = buffer + 64; | |||||
| tchar* t = end; | |||||
| *--t = 0; | |||||
| int64 v = (number >= 0) ? number : -number; | |||||
| do | |||||
| { | |||||
| *--t = (tchar)(T('0') + (int) (v % 10)); | |||||
| v /= 10; | |||||
| } while (v > 0); | |||||
| if (number < 0) | |||||
| *--t = T('-'); | |||||
| tchar buffer [32]; | |||||
| tchar* const end = buffer + 32; | |||||
| const tchar* const t = int64ToCharString (end, number); | |||||
| const int len = (int) (((char*) end) - ((char*) t)); | |||||
| createInternal (len - 1); | |||||
| memcpy (text->text, t, len); | |||||
| const int numChars = (int) (end - t); | |||||
| createInternal (numChars - 1); | |||||
| memcpy (text->text, t, numChars * sizeof (tchar)); | |||||
| } | } | ||||
| String::String (const uint64 number) throw() | String::String (const uint64 number) throw() | ||||
| { | { | ||||
| tchar buffer [64]; | |||||
| tchar* const end = buffer + 64; | |||||
| tchar buffer [32]; | |||||
| tchar* const end = buffer + 32; | |||||
| tchar* t = end; | tchar* t = end; | ||||
| *--t = 0; | *--t = 0; | ||||
| @@ -376,14 +384,14 @@ String::String (const uint64 number) throw() | |||||
| do | do | ||||
| { | { | ||||
| *--t = (tchar)(T('0') + (int) (v % 10)); | |||||
| *--t = (tchar) (T('0') + (int) (v % 10)); | |||||
| v /= 10; | v /= 10; | ||||
| } while (v > 0); | } while (v > 0); | ||||
| const int len = (int) (((char*) end) - ((char*) t)); | |||||
| createInternal (len - 1); | |||||
| memcpy (text->text, t, len); | |||||
| const int numChars = (int) (end - t); | |||||
| createInternal (numChars - 1); | |||||
| memcpy (text->text, t, numChars * sizeof (tchar)); | |||||
| } | } | ||||
| // a double-to-string routine that actually uses the number of dec. places you asked for | // a double-to-string routine that actually uses the number of dec. places you asked for | ||||