Added commified output when converting from integer to string.

This commit is contained in:
Branimir Karadžić
2018-07-16 19:37:49 -07:00
parent 7f4f5a282b
commit a4447f725b
3 changed files with 69 additions and 31 deletions

View File

@@ -472,7 +472,7 @@ namespace bx
}
template<typename Ty>
int32_t toStringSigned(char* _dst, int32_t _max, Ty _value, uint32_t _base)
int32_t toStringSigned(char* _dst, int32_t _max, Ty _value, uint32_t _base, char _separator)
{
if (_base == 10
&& _value < 0)
@@ -483,10 +483,11 @@ namespace bx
}
_max = toString(_dst + 1
, _max - 1
, typename std::make_unsigned<Ty>::type(-_value)
, _base
);
, _max - 1
, typename std::make_unsigned<Ty>::type(-_value)
, _base
, _separator
);
if (_max == 0)
{
return 0;
@@ -497,24 +498,25 @@ namespace bx
}
return toString(_dst
, _max
, typename std::make_unsigned<Ty>::type(_value)
, _base
);
, _max
, typename std::make_unsigned<Ty>::type(_value)
, _base
, _separator
);
}
int32_t toString(char* _dst, int32_t _max, int32_t _value, uint32_t _base)
int32_t toString(char* _dst, int32_t _max, int32_t _value, uint32_t _base, char _separator)
{
return toStringSigned(_dst, _max, _value, _base);
return toStringSigned(_dst, _max, _value, _base, _separator);
}
int32_t toString(char* _dst, int32_t _max, int64_t _value, uint32_t _base)
int32_t toString(char* _dst, int32_t _max, int64_t _value, uint32_t _base, char _separator)
{
return toStringSigned(_dst, _max, _value, _base);
return toStringSigned(_dst, _max, _value, _base, _separator);
}
template<typename Ty>
int32_t toStringUnsigned(char* _dst, int32_t _max, Ty _value, uint32_t _base)
int32_t toStringUnsigned(char* _dst, int32_t _max, Ty _value, uint32_t _base, char _separator)
{
char data[32];
int32_t len = 0;
@@ -525,6 +527,8 @@ namespace bx
return 0;
}
uint32_t count = 1;
do
{
const Ty rem = _value % _base;
@@ -538,7 +542,16 @@ namespace bx
data[len++] = char('a' + rem - 10);
}
} while (_value != 0);
if ('\0' != _separator
&& 0 == count%3
&& 0 != _value)
{
data[len++] = _separator;
}
++count;
}
while (0 != _value);
if (_max < len + 1)
{
@@ -552,14 +565,14 @@ namespace bx
return int32_t(len);
}
int32_t toString(char* _dst, int32_t _max, uint32_t _value, uint32_t _base)
int32_t toString(char* _dst, int32_t _max, uint32_t _value, uint32_t _base, char _separator)
{
return toStringUnsigned(_dst, _max, _value, _base);
return toStringUnsigned(_dst, _max, _value, _base, _separator);
}
int32_t toString(char* _dst, int32_t _max, uint64_t _value, uint32_t _base)
int32_t toString(char* _dst, int32_t _max, uint64_t _value, uint32_t _base, char _separator)
{
return toStringUnsigned(_dst, _max, _value, _base);
return toStringUnsigned(_dst, _max, _value, _base, _separator);
}
/*