mirror of
https://github.com/bkaradzic/bx.git
synced 2026-02-18 04:53:06 +01:00
Cleanup.
This commit is contained in:
39
src/crt.cpp
39
src/crt.cpp
@@ -115,11 +115,22 @@ namespace bx
|
||||
{
|
||||
struct Param
|
||||
{
|
||||
Param()
|
||||
: width(0)
|
||||
, base(10)
|
||||
, prec(6)
|
||||
, fill(' ')
|
||||
, left(false)
|
||||
, upper(false)
|
||||
{
|
||||
}
|
||||
|
||||
int32_t width;
|
||||
uint32_t base;
|
||||
uint32_t prec;
|
||||
char fill;
|
||||
bool left;
|
||||
bool upper;
|
||||
};
|
||||
|
||||
static int32_t write(WriterI* _writer, const char* _str, int32_t _len, const Param& _param, Error* _err)
|
||||
@@ -133,7 +144,17 @@ namespace bx
|
||||
size += writeRep(_writer, _param.fill, padding, _err);
|
||||
}
|
||||
|
||||
size += write(_writer, _str, len, _err);
|
||||
if (_param.upper)
|
||||
{
|
||||
for (int32_t ii = 0; ii < len; ++ii)
|
||||
{
|
||||
size += write(_writer, toUpper(_str[ii]), _err);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
size += write(_writer, _str, len, _err);
|
||||
}
|
||||
|
||||
if (_param.left)
|
||||
{
|
||||
@@ -143,6 +164,11 @@ namespace bx
|
||||
return size;
|
||||
}
|
||||
|
||||
static int32_t write(WriterI* _writer, char _ch, const Param& _param, Error* _err)
|
||||
{
|
||||
return write(_writer, &_ch, 1, _param, _err);
|
||||
}
|
||||
|
||||
static int32_t write(WriterI* _writer, const char* _str, const Param& _param, Error* _err)
|
||||
{
|
||||
return write(_writer, _str, INT32_MAX, _param, _err);
|
||||
@@ -235,11 +261,6 @@ namespace bx
|
||||
read(&reader, ch);
|
||||
|
||||
Param param;
|
||||
param.base = 10;
|
||||
param.prec = 6;
|
||||
param.left = false;
|
||||
param.fill = ' ';
|
||||
param.width = 0;
|
||||
|
||||
while (' ' == ch
|
||||
|| '-' == ch
|
||||
@@ -304,13 +325,14 @@ namespace bx
|
||||
switch (toLower(ch) )
|
||||
{
|
||||
case 'c':
|
||||
size += write(_writer, char(va_arg(_argList, int32_t) ), _err);
|
||||
size += write(_writer, char(va_arg(_argList, int32_t) ), param, _err);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
size += write(_writer, va_arg(_argList, const char*), param, _err);
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
case 'd':
|
||||
param.base = 10;
|
||||
size += write(_writer, va_arg(_argList, int32_t), param, _err);
|
||||
@@ -325,7 +347,8 @@ namespace bx
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
param.base = 16;
|
||||
param.base = 16;
|
||||
param.upper = isUpper(ch);
|
||||
size += write(_writer, va_arg(_argList, uint32_t), param, _err);
|
||||
break;
|
||||
|
||||
|
||||
@@ -53,16 +53,36 @@ TEST_CASE("vsnprintf f", "")
|
||||
REQUIRE(test("13.370 ", "%*.*f", -8, 3, 13.37) );
|
||||
}
|
||||
|
||||
TEST_CASE("vsnprintf d/u/x", "")
|
||||
TEST_CASE("vsnprintf d/i/u/x", "")
|
||||
{
|
||||
REQUIRE(test("1337", "%d", 1337) );
|
||||
REQUIRE(test("1337 ", "%-20d", 1337) );
|
||||
REQUIRE(test("-1337 ", "%-20d", -1337) );
|
||||
|
||||
REQUIRE(test("1337", "%i", 1337) );
|
||||
REQUIRE(test("1337 ", "%-20i", 1337) );
|
||||
REQUIRE(test("-1337 ", "%-20i", -1337) );
|
||||
|
||||
REQUIRE(test("1337", "%u", 1337) );
|
||||
REQUIRE(test("1337 ", "%-20u", 1337u) );
|
||||
REQUIRE(test("4294965959 ", "%-20u", -1337u) );
|
||||
|
||||
REQUIRE(test("1337", "%x", 0x1337) );
|
||||
REQUIRE(test("1234abcd ", "%-20x", 0x1234abcdu) );
|
||||
REQUIRE(test("1234ABCD ", "%-20X", 0x1234abcdu) );
|
||||
REQUIRE(test("edcb5433 ", "%-20x", -0x1234abcdu) );
|
||||
REQUIRE(test("EDCB5433 ", "%-20X", -0x1234abcdu) );
|
||||
REQUIRE(test("0000000000001234abcd", "%020x", 0x1234abcdu) );
|
||||
REQUIRE(test("0000000000001234ABCD", "%020X", 0x1234abcdu) );
|
||||
REQUIRE(test("000000000000edcb5433", "%020x", -0x1234abcdu) );
|
||||
REQUIRE(test("000000000000EDCB5433", "%020X", -0x1234abcdu) );
|
||||
}
|
||||
|
||||
TEST_CASE("vsnprintf", "")
|
||||
{
|
||||
REQUIRE(test("x", "%c", 'x') );
|
||||
REQUIRE(test("x ", "%-20c", 'x') );
|
||||
|
||||
REQUIRE(test("hello ", "%-20s", "hello") );
|
||||
REQUIRE(test("hello, world!", "%s, %s!", "hello", "world") );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user