aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-04-01 23:36:24 +0200
committerDan Engelbrecht <[email protected]>2022-04-01 23:36:24 +0200
commit047be064076840cdb908f226f34d9f0d1b607a60 (patch)
tree566bc8e341d9f069bd1e9b5eb6ee17b03ce57dc0
parentsafer and easier to read Char2Nibble (diff)
downloadzen-047be064076840cdb908f226f34d9f0d1b607a60.tar.xz
zen-047be064076840cdb908f226f34d9f0d1b607a60.zip
use std::unsigned_integral for ToHexNumber and ParseHexNumber
-rw-r--r--zencore/include/zencore/string.h13
-rw-r--r--zenstore/compactcas.cpp16
-rw-r--r--zenstore/include/zenstore/caslog.h2
3 files changed, 15 insertions, 16 deletions
diff --git a/zencore/include/zencore/string.h b/zencore/include/zencore/string.h
index 0aa7771a7..e502120ac 100644
--- a/zencore/include/zencore/string.h
+++ b/zencore/include/zencore/string.h
@@ -9,6 +9,7 @@
#include <string.h>
#include <charconv>
#include <codecvt>
+#include <concepts>
#include <optional>
#include <span>
#include <string_view>
@@ -595,12 +596,11 @@ ToHexNumber(const uint8_t* InputData, size_t ByteCount, char* OutString)
/// </summary>
/// <param name="Value">Integer value type</param>
/// <param name="outString">Output buffer where resulting string is written</param>
-template<typename T>
void
-ToHexNumber(T Value, char* OutString)
+ToHexNumber(std::unsigned_integral auto Value, char* OutString)
{
- ToHexNumber((const uint8_t*)&Value, sizeof(T), OutString);
- OutString[sizeof(T) * 2] = 0;
+ ToHexNumber((const uint8_t*)&Value, sizeof(Value), OutString);
+ OutString[sizeof(Value) * 2] = 0;
}
/// <summary>
@@ -610,11 +610,10 @@ ToHexNumber(T Value, char* OutString)
/// <param name="characterCount">Number of characters in string</param>
/// <param name="OutValue">Pointer to output value</param>
/// <returns>true if the input consisted of all valid hexadecimal characters</returns>
-template<typename T>
bool
-ParseHexNumber(const std::string HexString, T& OutValue)
+ParseHexNumber(const std::string HexString, std::unsigned_integral auto& OutValue)
{
- return ParseHexNumber(HexString.c_str(), sizeof(T) * 2, (uint8_t*)&OutValue);
+ return ParseHexNumber(HexString.c_str(), sizeof(OutValue) * 2, (uint8_t*)&OutValue);
}
//////////////////////////////////////////////////////////////////////////
diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp
index 7e52f31db..64f240613 100644
--- a/zenstore/compactcas.cpp
+++ b/zenstore/compactcas.cpp
@@ -1605,10 +1605,10 @@ TEST_CASE("compactcas.hex")
CHECK(!ParseHexNumber("", Value));
char Hex[9];
- ToHexNumber(0, Hex);
+ ToHexNumber(0u, Hex);
HexString = std::string(Hex);
CHECK(ParseHexNumber(HexString, Value));
- CHECK(Value == 0);
+ CHECK(Value == 0u);
ToHexNumber(std::numeric_limits<std::uint32_t>::max(), Hex);
HexString = std::string(Hex);
@@ -1616,23 +1616,23 @@ TEST_CASE("compactcas.hex")
CHECK(ParseHexNumber(HexString, Value));
CHECK(Value == std::numeric_limits<std::uint32_t>::max());
- ToHexNumber(0xadf14711, Hex);
+ ToHexNumber(0xadf14711u, Hex);
HexString = std::string(Hex);
CHECK(HexString == "adf14711");
CHECK(ParseHexNumber(HexString, Value));
- CHECK(Value == 0xadf14711);
+ CHECK(Value == 0xadf14711u);
- ToHexNumber(0x80000000, Hex);
+ ToHexNumber(0x80000000u, Hex);
HexString = std::string(Hex);
CHECK(HexString == "80000000");
CHECK(ParseHexNumber(HexString, Value));
- CHECK(Value == 0x80000000);
+ CHECK(Value == 0x80000000u);
- ToHexNumber(0x718293a4, Hex);
+ ToHexNumber(0x718293a4u, Hex);
HexString = std::string(Hex);
CHECK(HexString == "718293a4");
CHECK(ParseHexNumber(HexString, Value));
- CHECK(Value == 0x718293a4);
+ CHECK(Value == 0x718293a4u);
}
TEST_CASE("compactcas.compact.gc")
diff --git a/zenstore/include/zenstore/caslog.h b/zenstore/include/zenstore/caslog.h
index 66e2058f6..464cb373a 100644
--- a/zenstore/include/zenstore/caslog.h
+++ b/zenstore/include/zenstore/caslog.h
@@ -83,7 +83,7 @@ public:
CasLogFile::Append(&Record, sizeof Record);
}
- void Append(const std::span<T>& Records) { CasLogFile::Append(Records.data(), sizeof (T) * Records.size()); }
+ void Append(const std::span<T>& Records) { CasLogFile::Append(Records.data(), sizeof(T) * Records.size()); }
};
} // namespace zen