From 159b0a0367809f4ce48ed5d35c2254348e971ff8 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Tue, 23 Jun 2020 09:30:17 +0200 Subject: [PATCH] WIP --- slsDetectorSoftware/src/CmdProxy.cpp | 2 +- slsDetectorSoftware/src/CmdProxy.h | 13 +++++++------ slsSupportLib/include/ToString.h | 18 ++++++++++++++++++ slsSupportLib/tests/test-ToString.cpp | 13 +++++++++++++ 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index 35ce144be..968c8098b 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -1970,7 +1970,7 @@ std::string CmdProxy::PatternWord(int action) { WrongNumberOfParameters(1); } auto t = det->getPatternWord(StringTo(args[0]), {det_id}); - os << OutStringHex(t) << '\n'; + os << OutStringHex(t, 16) << '\n'; } else if (action == defs::PUT_ACTION) { if (args.size() != 2) { WrongNumberOfParameters(2); diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index 30024f198..28ec6208e 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -433,12 +433,13 @@ class CmdProxy { return ToStringHex(value.front()); return ToStringHex(value); } - /* - template std::string OutStringHex(const V &value, int - width) { if (value.equal()) return ToStringHex(value.front(), width); - return ToStringHex(value, width); - } - */ + + template std::string OutStringHex(const V &value, int width) { + if (value.equal()) + return ToStringHex(value.front(), width); + return ToStringHex(value, width); + } + template std::string OutString(const V &value) { if (value.equal()) return ToString(value.front()); diff --git a/slsSupportLib/include/ToString.h b/slsSupportLib/include/ToString.h index 61b4e47ab..b4327fb02 100644 --- a/slsSupportLib/include/ToString.h +++ b/slsSupportLib/include/ToString.h @@ -144,6 +144,24 @@ ToStringHex(const T &container) { return os.str(); } +template +typename std::enable_if< + is_container::value && + !std::is_same::value, + std::string>::type +ToStringHex(const T &container, int width) { + std::ostringstream os; + os << '['; + if (!container.empty()) { + auto it = container.cbegin(); + os << ToStringHex(*it++, width); + while (it != container.cend()) + os << ", " << ToStringHex(*it++, width); + } + os << ']'; + return os.str(); +} + template std::string ToString(const std::map &m) { std::ostringstream os; diff --git a/slsSupportLib/tests/test-ToString.cpp b/slsSupportLib/tests/test-ToString.cpp index 169755584..ad2016553 100644 --- a/slsSupportLib/tests/test-ToString.cpp +++ b/slsSupportLib/tests/test-ToString.cpp @@ -12,6 +12,7 @@ using sls::defs; using sls::StringTo; using sls::ToString; +using sls::ToStringHex; using namespace sls::time; TEST_CASE("Integer conversions", "[support]") { @@ -260,4 +261,16 @@ TEST_CASE("vector of dac index to string") { std::vector daci{defs::VCASSH, defs::VTH2, defs::VRSHAPER}; auto r = ToString(daci); REQUIRE(r == "[vcassh, vth2, vrshaper]"); +} + +TEST_CASE("int or uin64_t to a string in hex") { + REQUIRE(ToStringHex(65535) == "0xffff"); + REQUIRE(ToStringHex(65535, 8) == "0x0000ffff"); + REQUIRE(ToStringHex(8927748192) == "0x21422a060"); + REQUIRE(ToStringHex(8927748192, 16) == "0x000000021422a060"); + std::vector temp{244, 65535, 1638582}; + auto r = ToStringHex(temp); + REQUIRE(r == "[0xf4, 0xffff, 0x1900b6]"); + r = ToStringHex(temp, 8); + REQUIRE(r == "[0x000000f4, 0x0000ffff, 0x001900b6]"); } \ No newline at end of file