From 6fdb82fa7f196173589ca281642ddc6ac6961005 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Fri, 27 Aug 2021 20:10:32 +0100 Subject: Extract and test time2From24bit --- lib/mysql_types.cpp | 26 ++++++++++++++++++++++++-- lib/mysql_types.h | 2 ++ 2 files changed, 26 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/mysql_types.cpp b/lib/mysql_types.cpp index 8b2208e..40614ef 100644 --- a/lib/mysql_types.cpp +++ b/lib/mysql_types.cpp @@ -3,10 +3,21 @@ #include "rawDataReader.h" #include #include +#include #include #include namespace MyGrate::MySQL { +#define NTOH(B) \ + inline auto ntoh(uint##B##_t x) \ + { \ + if constexpr (__BYTE_ORDER == __LITTLE_ENDIAN) \ + x = bswap_##B(x); \ + return x; \ + } + NTOH(32); + NTOH(64); + typename Type::C Type::read(RawDataReader &, RawDataReader &) { @@ -153,10 +164,21 @@ namespace MyGrate::MySQL { return t; } + Time + time2From24bit(uint32_t tint) + { + Time t {}; + t.second = bitslice<6>(tint, 8); + t.minute = bitslice<6>(tint, 14); + t.hour = bitslice<5>(tint, 20); + return t; + } + typename Type::C - Type::read(RawDataReader &, RawDataReader &) + Type::read(RawDataReader & md, RawDataReader & data) { - throw std::logic_error("Not implemented"); + md.discard(1); + return time2From24bit(ntoh(data.readValue(3))); } typename Type::C diff --git a/lib/mysql_types.h b/lib/mysql_types.h index d32f6a8..d49cd2f 100644 --- a/lib/mysql_types.h +++ b/lib/mysql_types.h @@ -84,6 +84,8 @@ namespace MyGrate { #undef DEFINE_USTYPE #undef DEFINE_TYPE + Time time2From24bit(uint32_t tint); + struct ReplicationPosition { #ifndef __cpp_aggregate_paren_init ReplicationPosition(std::string f, uint64_t p) : filename {std::move(f)}, position {p} { } -- cgit v1.2.3