From aed6296cabc2b7d0a62fa4ccebb8d6a2c29beb00 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Mon, 1 Apr 2024 16:51:41 +0100 Subject: float formatting and fix general formatting --- src/factories/GenericArrayFactory.cpp | 23 +++++++++++++++-------- src/factories/GenericArrayFactory.h | 1 + 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/factories/GenericArrayFactory.cpp b/src/factories/GenericArrayFactory.cpp index e5d6e0f..ad438ca 100644 --- a/src/factories/GenericArrayFactory.cpp +++ b/src/factories/GenericArrayFactory.cpp @@ -8,8 +8,9 @@ #include #define FORMAT_INT(x, w) std::dec << std::setfill(' ') << std::setw(w) << x -#define GET_MAG(num) ((uint32_t)((abs(int(num)) > 1) ? std::log10(abs(int(num))) : 1)) -#define GET_MAG_U(num) ((uint32_t)((num > 1) ? std::log10(num) : 1)) +#define FORMAT_FLOAT(x, w, p) std::dec << std::setfill(' ') << std::fixed << std::setprecision(p) << std::setw(w) << x +#define GET_MAG(num) ((uint32_t)((abs(int(num)) > 1) ? std::log10(abs(int(num))) + 1 : 1)) +#define GET_MAG_U(num) ((uint32_t)((num > 1) ? std::log10(num) + 1 : 1)) std::unordered_map arrayTypeMap = { { "u8", ArrayType::u8 }, @@ -80,7 +81,8 @@ static int GetPrecision(float f) { GenericArray::GenericArray(std::vector data) : mData(std::move(data)) { mMaxWidth = 1; - for (auto &datum : data) { + mMaxPrec = 1; + for (auto &datum : mData) { switch (static_cast(datum.index())) { case ArrayType::u8: { mMaxWidth = std::max(mMaxWidth, GET_MAG_U(std::get(datum))); @@ -113,19 +115,23 @@ GenericArray::GenericArray(std::vector data) : mData(std::move(data) case ArrayType::f32: { auto floatNum = std::get(datum); mMaxWidth = std::max(mMaxWidth, GET_MAG(floatNum) + 1 + GetPrecision(floatNum)); + mMaxPrec = std::max(mMaxPrec, (uint32_t)GetPrecision(floatNum)); break; } case ArrayType::f64: { auto doubleNum = std::get(datum); mMaxWidth = std::max(mMaxWidth, GET_MAG(doubleNum) + 1 + GetPrecision(doubleNum)); + mMaxPrec = std::max(mMaxPrec, (uint32_t)GetPrecision(doubleNum)); break; } case ArrayType::Vec2f: { mMaxWidth = std::max(mMaxWidth, (uint32_t)std::get(datum).width()); + mMaxPrec = std::max(mMaxPrec, (uint32_t)std::get(datum).precision()); break; } case ArrayType::Vec3f: { mMaxWidth = std::max(mMaxWidth, (uint32_t)std::get(datum).width()); + mMaxPrec = std::max(mMaxPrec, (uint32_t)std::get(datum).precision()); break; } case ArrayType::Vec3s: { @@ -138,6 +144,7 @@ GenericArray::GenericArray(std::vector data) : mData(std::move(data) } case ArrayType::Vec4f: { mMaxWidth = std::max(mMaxWidth,(uint32_t)std::get(datum).width()); + mMaxPrec = std::max(mMaxPrec, (uint32_t)std::get(datum).precision()); break; } case ArrayType::Vec4s: { @@ -208,16 +215,16 @@ ExportResult ArrayCodeExporter::Export(std::ostream &write, std::shared_ptr(datum), array->mMaxWidth) << ", "; break; case ArrayType::f32: - write << FORMAT_INT(std::get(datum), array->mMaxWidth) << ", "; + write << FORMAT_FLOAT(std::get(datum), array->mMaxWidth, array->mMaxPrec) << ", "; break; case ArrayType::f64: - write << FORMAT_INT(std::get(datum), array->mMaxWidth) << ", "; + write << FORMAT_FLOAT(std::get(datum), array->mMaxWidth, array->mMaxPrec) << ", "; break; case ArrayType::Vec2f: - write << FORMAT_INT(std::get(datum), array->mMaxWidth) << ", "; + write << FORMAT_FLOAT(std::get(datum), array->mMaxWidth, array->mMaxPrec) << ", "; break; case ArrayType::Vec3f: - write << FORMAT_INT(std::get(datum), array->mMaxWidth) << ", "; + write << FORMAT_FLOAT(std::get(datum), array->mMaxWidth, array->mMaxPrec) << ", "; break; case ArrayType::Vec3s: write << FORMAT_INT(std::get(datum), array->mMaxWidth) << ", "; @@ -226,7 +233,7 @@ ExportResult ArrayCodeExporter::Export(std::ostream &write, std::shared_ptr(datum), array->mMaxWidth) << ", "; break; case ArrayType::Vec4f: - write << FORMAT_INT(std::get(datum), array->mMaxWidth) << ", "; + write << FORMAT_FLOAT(std::get(datum), array->mMaxWidth, array->mMaxPrec) << ", "; break; case ArrayType::Vec4s: write << FORMAT_INT(std::get(datum), array->mMaxWidth) << ", "; diff --git a/src/factories/GenericArrayFactory.h b/src/factories/GenericArrayFactory.h index a8d368a..4f7688e 100644 --- a/src/factories/GenericArrayFactory.h +++ b/src/factories/GenericArrayFactory.h @@ -14,6 +14,7 @@ enum class ArrayType { class GenericArray : public IParsedData { public: uint32_t mMaxWidth; + uint32_t mMaxPrec; std::vector mData; explicit GenericArray(std::vector data); -- cgit v1.2.3