From f355b9e2e7ec94b00ce155bd0e65c6408fa05bde Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 9 Mar 2020 22:23:47 -0500 Subject: [PATCH] Revert "Merge pull request #33673 from cbodley/wip-denc-enum" This reverts commit 1041092696c2e3c9ee4e32b764ead06f5bc1f694, reversing changes made to c2f584f32a9619b39d53178c2327dc26b3a2a27c. This changed the encoding for certain types. Signed-off-by: Sage Weil --- src/include/denc.h | 53 ++++++++++--------------------------------- src/test/test_denc.cc | 22 ------------------ 2 files changed, 12 insertions(+), 63 deletions(-) diff --git a/src/include/denc.h b/src/include/denc.h index b837f74e24aab..adb93ad16a1af 100644 --- a/src/include/denc.h +++ b/src/include/denc.h @@ -268,7 +268,17 @@ template int DencDumper::i = 0; namespace _denc { template inline constexpr bool is_any_of = (... || std::is_same_v); -} // namespace _denc + +template struct underlying_type { + using type = T; +}; +template +struct underlying_type>> { + using type = std::underlying_type_t; +}; +template +using underlying_type_t = typename underlying_type::type; +} template struct is_const_iterator @@ -297,12 +307,11 @@ get_pos_add(It& i) { return *reinterpret_cast(i.get_pos_add(sizeof(T))); } -// network-order integer encoding template struct denc_traits< T, std::enable_if_t< - _denc::is_any_of, ceph_le64, ceph_le32, ceph_le16, uint8_t #ifndef _CHAR_IS_SIGNED , int8_t @@ -402,44 +411,6 @@ struct denc_traits>>> } }; - -// enum -// -template -struct denc_traits>> -{ - static constexpr bool supported = true; - static constexpr bool featured = false; - static constexpr bool bounded = true; - static constexpr bool need_contiguous = false; - - using enum_type = T; - using underlying_type = std::underlying_type_t; - using base_traits = denc_traits; - - static void bound_encode(const T &o, size_t& p, uint64_t f=0) { - base_traits::bound_encode(static_cast(o), p, f); - } - template - static std::enable_if_t> - encode(const T &o, It& p, uint64_t f=0) { - base_traits::encode(static_cast(o), p, f); - } - template - static std::enable_if_t> - decode(T& o, It& p, uint64_t f=0) { - underlying_type v; - base_traits::decode(v, p, f); - o = static_cast(v); - } - static void decode(T& o, ceph::buffer::list::const_iterator &p) { - underlying_type v; - base_traits::decode(v, p); - o = static_cast(v); - } -}; - - // varint // // high bit of each byte indicates another byte follows. diff --git a/src/test/test_denc.cc b/src/test/test_denc.cc index 7df181d9e67b1..0924ee4eda2c8 100644 --- a/src/test/test_denc.cc +++ b/src/test/test_denc.cc @@ -180,28 +180,6 @@ TEST(denc, string) test_denc(c); } -TEST(denc, enum_class) -{ - enum class enum_class_8 : int8_t { value }; - test_denc(enum_class_8::value); - enum class enum_class_u8 : uint8_t { value }; - test_denc(enum_class_u8::value); - enum class enum_class_16 : int16_t { value }; - test_denc(enum_class_16::value); - enum class enum_class_u16 : uint16_t { value }; - test_denc(enum_class_u16::value); - enum class enum_class_32 : int32_t { value }; - test_denc(enum_class_32::value); - enum class enum_class_u32 : uint32_t { value }; - test_denc(enum_class_u32::value); - enum class enum_class_64 : int64_t { value }; - test_denc(enum_class_64::value); - enum class enum_class_u64 : uint64_t { value }; - test_denc(enum_class_u64::value); - enum class enum_class { value }; - test_denc(enum_class::value); -} - struct legacy_t { int32_t a = 1; void encode(bufferlist& bl) const { -- 2.39.5