mirror of
https://github.com/bkaradzic/bx.git
synced 2026-02-17 20:52:37 +01:00
Removed use of CRT vsnprintf.
This commit is contained in:
@@ -356,43 +356,6 @@ namespace bx
|
||||
return result;
|
||||
}
|
||||
|
||||
inline int32_t writePrintfVargs(WriterI* _writer, const char* _format, va_list _argList)
|
||||
{
|
||||
va_list argListCopy;
|
||||
va_copy(argListCopy, _argList);
|
||||
|
||||
char temp[2048];
|
||||
char* out = temp;
|
||||
int32_t max = sizeof(temp);
|
||||
int32_t len = vsnprintf(out, max, _format, argListCopy);
|
||||
|
||||
va_end(argListCopy);
|
||||
|
||||
if (len > max)
|
||||
{
|
||||
va_copy(argListCopy, _argList);
|
||||
|
||||
out = (char*)alloca(len);
|
||||
len = vsnprintf(out, len, _format, argListCopy);
|
||||
|
||||
va_end(argListCopy);
|
||||
}
|
||||
|
||||
int32_t size = write(_writer, out, len);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
inline int32_t writePrintf(WriterI* _writer, const char* _format, ...)
|
||||
{
|
||||
va_list argList;
|
||||
va_start(argList, _format);
|
||||
int32_t size = writePrintfVargs(_writer, _format, argList);
|
||||
va_end(argList);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
inline int64_t skip(SeekerI* _seeker, int64_t _offset)
|
||||
{
|
||||
return _seeker->seek(_offset, Whence::Current);
|
||||
|
||||
@@ -262,13 +262,13 @@ namespace bx
|
||||
/// Write string view.
|
||||
int32_t write(WriterI* _writer, const StringView& _str, Error* _err = NULL);
|
||||
|
||||
///
|
||||
/// Write formated string.
|
||||
int32_t write(WriterI* _writer, const StringView& _format, va_list _argList, Error* _err);
|
||||
|
||||
///
|
||||
/// Write formated string.
|
||||
int32_t write(WriterI* _writer, Error* _err, const StringView* _format, ...);
|
||||
|
||||
///
|
||||
/// Write formated string.
|
||||
int32_t write(WriterI* _writer, Error* _err, const char* _format, ...);
|
||||
|
||||
/// Write repeat the same value.
|
||||
@@ -286,12 +286,6 @@ namespace bx
|
||||
template<typename Ty>
|
||||
int32_t writeBE(WriterI* _writer, const Ty& _value, Error* _err = NULL);
|
||||
|
||||
/// Write formated string.
|
||||
int32_t writePrintfVargs(WriterI* _writer, const char* _format, va_list _argList);
|
||||
|
||||
/// Write formated string.
|
||||
int32_t writePrintf(WriterI* _writer, const char* _format, ...);
|
||||
|
||||
/// Skip _offset bytes forward.
|
||||
int64_t skip(SeekerI* _seeker, int64_t _offset);
|
||||
|
||||
|
||||
@@ -304,7 +304,8 @@ extern "C" int printf(const char* _format, ...)
|
||||
va_list argList;
|
||||
va_start(argList, _format);
|
||||
bx::WriterI* writer = bx::getStdOut();
|
||||
int32_t len = bx::writePrintfVargs(writer, _format, argList);
|
||||
bx::Error err;
|
||||
int32_t len = bx::write(writer, &err, _format, argList);
|
||||
va_end(argList);
|
||||
return len;
|
||||
}
|
||||
|
||||
@@ -51,8 +51,8 @@ namespace bx
|
||||
|
||||
virtual int32_t write(const void* _data, int32_t _size, Error* _err) override
|
||||
{
|
||||
BX_UNUSED(_data, _size, _err);
|
||||
return 0;
|
||||
BX_UNUSED(_data, _err);
|
||||
return _size;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -9,10 +9,6 @@
|
||||
#include <bx/readerwriter.h>
|
||||
#include <bx/string.h>
|
||||
|
||||
#if !BX_CRT_NONE
|
||||
# include <stdio.h> // vsnprintf
|
||||
#endif // !BX_CRT_NONE
|
||||
|
||||
namespace bx
|
||||
{
|
||||
inline bool isInRange(char _ch, char _from, char _to)
|
||||
@@ -1124,7 +1120,7 @@ namespace bx
|
||||
return total;
|
||||
}
|
||||
|
||||
int32_t vsnprintfRef(char* _out, int32_t _max, const char* _format, va_list _argList)
|
||||
int32_t vsnprintf(char* _out, int32_t _max, const char* _format, va_list _argList)
|
||||
{
|
||||
if (1 < _max)
|
||||
{
|
||||
@@ -1154,6 +1150,12 @@ namespace bx
|
||||
return size;
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
#if !BX_CRT_NONE
|
||||
# include <stdio.h> // vsnprintf
|
||||
#endif // !BX_CRT_NONE
|
||||
|
||||
int32_t vsnprintf(char* _out, int32_t _max, const char* _format, va_list _argList)
|
||||
{
|
||||
va_list argList;
|
||||
@@ -1178,6 +1180,8 @@ namespace bx
|
||||
return total;
|
||||
}
|
||||
|
||||
#endif // 0
|
||||
|
||||
int32_t snprintf(char* _out, int32_t _max, const char* _format, ...)
|
||||
{
|
||||
va_list argList;
|
||||
|
||||
@@ -11,24 +11,25 @@
|
||||
TEST_CASE("easing", "")
|
||||
{
|
||||
bx::WriterI* writer = bx::getNullOut();
|
||||
bx::Error err;
|
||||
|
||||
for (uint32_t ee = 0; ee < bx::Easing::Count; ++ee)
|
||||
{
|
||||
bx::writePrintf(writer, "\n\n%d\n", ee);
|
||||
bx::write(writer, &err, "\n\n%d\n", ee);
|
||||
|
||||
const bx::EaseFn easing = bx::getEaseFunc(bx::Easing::Enum(ee) );
|
||||
|
||||
const int32_t nx = 64;
|
||||
const int32_t ny = 10;
|
||||
|
||||
bx::writePrintf(writer, "\t/// ^\n");
|
||||
bx::write(writer, &err, "\t/// ^\n");
|
||||
|
||||
for (int32_t yy = ny+4; yy >= -5; --yy)
|
||||
{
|
||||
const float ys = float(yy )/float(ny);
|
||||
const float ye = float(yy+1.0)/float(ny);
|
||||
|
||||
bx::writePrintf(writer, "\t/// %c", yy != 0 ? '|' : '+');
|
||||
bx::write(writer, &err, "\t/// %c", yy != 0 ? '|' : '+');
|
||||
|
||||
for (int32_t xx = 0; xx < nx; ++xx)
|
||||
{
|
||||
@@ -41,18 +42,18 @@ TEST_CASE("easing", "")
|
||||
if (vv >= ys
|
||||
&& vv < ye)
|
||||
{
|
||||
bx::writePrintf(writer, "*");
|
||||
bx::write(writer, "*");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (jj == 10)
|
||||
{
|
||||
bx::writePrintf(writer, "%c", yy != 0 ? ' ' : '-');
|
||||
bx::write(writer, &err, "%c", yy != 0 ? ' ' : '-');
|
||||
}
|
||||
}
|
||||
|
||||
bx::writePrintf(writer, "%s\n", yy != 0 ? "" : ">");
|
||||
bx::write(writer, &err, "%s\n", yy != 0 ? "" : ">");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,84 +55,98 @@ TEST_CASE("libm", "")
|
||||
REQUIRE(bx::equal( 0.89f, bx::fract( 13.89f), 0.000001f) );
|
||||
REQUIRE(bx::equal(-0.89f, bx::fract(-13.89f), 0.000001f) );
|
||||
|
||||
bx::Error err;
|
||||
|
||||
for (int32_t yy = -10; yy < 10; ++yy)
|
||||
{
|
||||
for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "ldexp(%f, %d) == %f (expected: %f)\n", xx, yy, bx::ldexp(xx, yy), ::ldexpf(xx, yy) );
|
||||
bx::write(writer, &err, "ldexp(%f, %d) == %f (expected: %f)\n", xx, yy, bx::ldexp(xx, yy), ::ldexpf(xx, yy) );
|
||||
REQUIRE(bx::equal(bx::ldexp(xx, yy), ::ldexpf(xx, yy), 0.00001f) );
|
||||
}
|
||||
}
|
||||
|
||||
for (float xx = -80.0f; xx < 80.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "exp(%f) == %f (expected: %f)\n", xx, bx::exp(xx), ::expf(xx) );
|
||||
bx::write(writer, &err, "exp(%f) == %f (expected: %f)\n", xx, bx::exp(xx), ::expf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::exp(xx), ::expf(xx), 0.00001f) );
|
||||
}
|
||||
|
||||
for (float xx = 0.0f; xx < 100.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "rsqrt(%f) == %f (expected: %f)\n", xx, bx::rsqrt(xx), 1.0f/::sqrtf(xx) );
|
||||
bx::write(writer, &err, "rsqrt(%f) == %f (expected: %f)\n", xx, bx::rsqrt(xx), 1.0f/::sqrtf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::rsqrt(xx), 1.0f/::sqrtf(xx), 0.00001f) );
|
||||
}
|
||||
|
||||
for (float xx = 0.0f; xx < 100.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "sqrt(%f) == %f (expected: %f)\n", xx, bx::sqrt(xx), ::sqrtf(xx) );
|
||||
bx::write(writer, &err, "sqrt(%f) == %f (expected: %f)\n", xx, bx::sqrt(xx), ::sqrtf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::sqrt(xx), ::sqrtf(xx), 0.00001f) );
|
||||
}
|
||||
|
||||
for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "pow(1.389f, %f) == %f (expected: %f)\n", xx, bx::pow(1.389f, xx), ::powf(1.389f, xx) );
|
||||
bx::write(writer, &err, "pow(1.389f, %f) == %f (expected: %f)\n", xx, bx::pow(1.389f, xx), ::powf(1.389f, xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::pow(1.389f, xx), ::powf(1.389f, xx), 0.00001f) );
|
||||
}
|
||||
|
||||
for (float xx = -1.0f; xx < 1.0f; xx += 0.001f)
|
||||
{
|
||||
bx::writePrintf(writer, "asin(%f) == %f (expected: %f)\n", xx, bx::asin(xx), ::asinf(xx) );
|
||||
bx::write(writer, &err, "asin(%f) == %f (expected: %f)\n", xx, bx::asin(xx), ::asinf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::asin(xx), ::asinf(xx), 0.0001f) );
|
||||
}
|
||||
|
||||
for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "sin(%f) == %f (expected: %f)\n", xx, bx::sin(xx), ::sinf(xx) );
|
||||
bx::write(writer, &err, "sin(%f) == %f (expected: %f)\n", xx, bx::sin(xx), ::sinf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::sin(xx), ::sinf(xx), 0.00001f) );
|
||||
}
|
||||
|
||||
for (float xx = -1.0f; xx < 1.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "sinh(%f) == %f (expected: %f)\n", xx, bx::sinh(xx), ::sinhf(xx) );
|
||||
bx::write(writer, &err, "sinh(%f) == %f (expected: %f)\n", xx, bx::sinh(xx), ::sinhf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::sinh(xx), ::sinhf(xx), 0.00001f) );
|
||||
}
|
||||
|
||||
for (float xx = -1.0f; xx < 1.0f; xx += 0.001f)
|
||||
{
|
||||
bx::writePrintf(writer, "acos(%f) == %f (expected: %f\n)", xx, bx::acos(xx), ::acosf(xx) );
|
||||
bx::write(writer, &err, "acos(%f) == %f (expected: %f\n)", xx, bx::acos(xx), ::acosf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::acos(xx), ::acosf(xx), 0.0001f) );
|
||||
}
|
||||
|
||||
for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "cos(%f) == %f (expected: %f)\n", xx, bx::cos(xx), ::cosf(xx) );
|
||||
bx::write(writer, &err, "cos(%f) == %f (expected: %f)\n", xx, bx::cos(xx), ::cosf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::cos(xx), ::cosf(xx), 0.00001f) );
|
||||
}
|
||||
|
||||
for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "tan(%f) == %f (expected: %f)\n", xx, bx::tan(xx), ::tanf(xx) );
|
||||
bx::write(writer, &err, "tan(%f) == %f (expected: %f)\n", xx, bx::tan(xx), ::tanf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::tan(xx), ::tanf(xx), 0.001f) );
|
||||
}
|
||||
|
||||
for (float xx = -1.0f; xx < 1.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "tanh(%f) == %f (expected: %f\n", xx, bx::tanh(xx), ::tanhf(xx) );
|
||||
bx::write(writer, &err, "tanh(%f) == %f (expected: %f\n", xx, bx::tanh(xx), ::tanhf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::tanh(xx), ::tanhf(xx), 0.00001f) );
|
||||
}
|
||||
|
||||
for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "atan(%f) == %f (expected: %f)\n", xx, bx::atan(xx), ::atanf(xx) );
|
||||
bx::write(writer, &err, "atan(%f) == %f (expected: %f)\n", xx, bx::atan(xx), ::atanf(xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::atan(xx), ::atanf(xx), 0.00001f) );
|
||||
}
|
||||
|
||||
@@ -140,7 +154,8 @@ TEST_CASE("libm", "")
|
||||
{
|
||||
for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
|
||||
{
|
||||
bx::writePrintf(writer, "atan2(%f, %f) == %f (expected: %f)\n", yy, xx, bx::atan2(yy, xx), ::atan2f(yy, xx) );
|
||||
bx::write(writer, &err, "atan2(%f, %f) == %f (expected: %f)\n", yy, xx, bx::atan2(yy, xx), ::atan2f(yy, xx) );
|
||||
REQUIRE(err.isOk() );
|
||||
REQUIRE(bx::equal(bx::atan2(yy, xx), ::atan2f(yy, xx), 0.00001f) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,38 +41,40 @@ void testRng(const char* _name, Ty* _rng)
|
||||
}
|
||||
|
||||
bx::WriterI* writer = bx::getNullOut();
|
||||
bx::writePrintf(writer, "%s\n", _name);
|
||||
bx::Error err;
|
||||
|
||||
bx::write(writer, &err, "%s\n", _name);
|
||||
|
||||
{
|
||||
bx::writePrintf(writer, "\tbits histogram:\n");
|
||||
bx::write(writer, &err, "\tbits histogram:\n");
|
||||
uint32_t min = UINT32_MAX;
|
||||
uint32_t max = 0;
|
||||
|
||||
for (uint32_t ii = 0; ii < BX_COUNTOF(histBits); ++ii)
|
||||
{
|
||||
bx::writePrintf(writer, "\t\t%3d: %d\n", ii, histBits[ii]);
|
||||
bx::write(writer, &err, "\t\t%3d: %d\n", ii, histBits[ii]);
|
||||
min = bx::min(min, histBits[ii]);
|
||||
max = bx::max(max, histBits[ii]);
|
||||
}
|
||||
|
||||
bx::writePrintf(writer, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
|
||||
bx::write(writer, &err, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
|
||||
|
||||
REQUIRE(max-min < 8000);
|
||||
}
|
||||
|
||||
{
|
||||
bx::writePrintf(writer, "\tuint8_t histogram:\n");
|
||||
bx::write(writer, &err, "\tuint8_t histogram:\n");
|
||||
uint32_t min = UINT32_MAX;
|
||||
uint32_t max = 0;
|
||||
|
||||
for (uint32_t ii = 0; ii < BX_COUNTOF(histUint8); ++ii)
|
||||
{
|
||||
bx::writePrintf(writer, "\t\t%3d: %d\n", ii, histUint8[ii]);
|
||||
bx::write(writer, &err, "\t\t%3d: %d\n", ii, histUint8[ii]);
|
||||
min = bx::min(min, histUint8[ii]);
|
||||
max = bx::max(max, histUint8[ii]);
|
||||
}
|
||||
|
||||
bx::writePrintf(writer, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
|
||||
bx::write(writer, &err, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
|
||||
|
||||
REQUIRE(max-min < 8000);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user