Use stringstream to log integral values.

This commit is contained in:
Matt 2019-01-02 06:06:09 +01:00
parent 74668c6188
commit fc4e45562d
1 changed files with 11 additions and 16 deletions

View File

@ -19,6 +19,9 @@
#include "MemoryStream.h" #include "MemoryStream.h"
#include <cstdio> #include <cstdio>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <stdexcept> #include <stdexcept>
template<typename T> struct DataSerializerTraits template<typename T> struct DataSerializerTraits
@ -43,19 +46,11 @@ template<typename T> struct DataSerializerTraitsIntegral
} }
static void log(IStream* stream, const T& val) static void log(IStream* stream, const T& val)
{ {
char temp[32] = {}; std::stringstream ss;
if constexpr (sizeof(T) == 1) ss << std::hex << std::setw(sizeof(T) * 2) << std::setfill('0') << +val;
snprintf(temp, sizeof(temp), "%02X", val);
else if constexpr (sizeof(T) == 2)
snprintf(temp, sizeof(temp), "%04X", val);
else if constexpr (sizeof(T) == 4)
snprintf(temp, sizeof(temp), "%08X", val);
else if constexpr (sizeof(T) == 8)
snprintf(temp, sizeof(temp), "%016llX", val);
else
static_assert("Invalid size");
stream->Write(temp, strlen(temp)); std::string str = ss.str();
stream->Write(str.c_str(), str.size());
} }
}; };
@ -132,9 +127,9 @@ template<> struct DataSerializerTraits<std::string>
} }
static void log(IStream* stream, const std::string& str) static void log(IStream* stream, const std::string& str)
{ {
stream->Write("\""); stream->Write("\"", 1);
stream->Write(str.data(), str.size()); stream->Write(str.data(), str.size());
stream->Write("\""); stream->Write("\"", 1);
} }
}; };
@ -287,13 +282,13 @@ template<typename _Ty, size_t _Size> struct DataSerializerTraits<std::array<_Ty,
} }
static void log(IStream* stream, const std::array<_Ty, _Size>& val) static void log(IStream* stream, const std::array<_Ty, _Size>& val)
{ {
stream->Write("{"); stream->Write("{", 1);
DataSerializerTraits<_Ty> s; DataSerializerTraits<_Ty> s;
for (auto&& sub : val) for (auto&& sub : val)
{ {
s.log(stream, sub); s.log(stream, sub);
stream->Write("; ", 2); stream->Write("; ", 2);
} }
stream->Write("}"); stream->Write("}", 1);
} }
}; };