From 953fce3f7bc43f598d6416712ea83e6c6cdf42e2 Mon Sep 17 00:00:00 2001 From: Tomasz Grabiec Date: Fri, 10 Jun 2016 21:55:24 +0200 Subject: [PATCH] serializer: Define serializer<> specializations for integral types --- serializer.hh | 107 ++++++++++++++------------------------------------ 1 file changed, 29 insertions(+), 78 deletions(-) diff --git a/serializer.hh b/serializer.hh index 5bd0fb75f3..216c22327d 100644 --- a/serializer.hh +++ b/serializer.hh @@ -49,87 +49,38 @@ inline void serialize_integral(Output& output, T data) { output.write(reinterpret_cast(&data), sizeof(T)); } -// For integer type -template -int8_t deserialize(Input& input, boost::type) { - return deserialize_integral(input); -} -template -uint8_t deserialize(Input& input, boost::type) { - return deserialize_integral(input); -} -template -bool deserialize(Input& input, boost::type) { - return deserialize(input, boost::type()); -} -template -int16_t deserialize(Input& input, boost::type) { - return deserialize_integral(input); -} -template -uint16_t deserialize(Input& input, boost::type) { - return deserialize_integral(input); -} -template -int32_t deserialize(Input& input, boost::type) { - return deserialize_integral(input); -} -template -uint32_t deserialize(Input& input, boost::type) { - return deserialize_integral(input); -} -template -int64_t deserialize(Input& input, boost::type) { - return deserialize_integral(input); -} -template -uint64_t deserialize(Input& input, boost::type) { - return deserialize_integral(input); -} - -template -void serialize(Output& output, int8_t data) { - serialize_integral(output, data); -} -template -void serialize(Output& output, uint8_t data) { - serialize_integral(output, data); -} -template -void serialize(Output& output, bool data) { - serialize(output, uint8_t(data)); -} -template -void serialize(Output& output, int16_t data) { - serialize_integral(output, data); -} -template -void serialize(Output& output, uint16_t data) { - serialize_integral(output, data); -} -template -void serialize(Output& output, int32_t data) { - serialize_integral(output, data); -} -template -void serialize(Output& output, uint32_t data) { - serialize_integral(output, data); -} -template -void serialize(Output& output, int64_t data) { - serialize_integral(output, data); -} -template -void serialize(Output& output, uint64_t data) { - serialize_integral(output, data); -} -template -void safe_serialize_as_uint32(Output& output, uint64_t data); - - template struct serializer; +template +struct integral_serializer { + template + static T read(Input& v) { + return deserialize_integral(v); + } + template + static void write(Output& out, T v) { + serialize_integral(out, v); + } + template + static void skip(Input& v) { + read(v); + } +}; + +template<> struct serializer : public integral_serializer {}; +template<> struct serializer : public integral_serializer {}; +template<> struct serializer : public integral_serializer {}; +template<> struct serializer : public integral_serializer {}; +template<> struct serializer : public integral_serializer {}; +template<> struct serializer : public integral_serializer {}; +template<> struct serializer : public integral_serializer {}; +template<> struct serializer : public integral_serializer {}; +template<> struct serializer : public integral_serializer {}; + +template +void safe_serialize_as_uint32(Output& output, uint64_t data); + template inline void serialize(Output& out, const T& v) { serializer::write(out, v);