From 763be9ffa3d4c5132b8228f5fcc15a5a2d5713f6 Mon Sep 17 00:00:00 2001 From: Michal Siedlaczek Date: Sat, 14 Dec 2024 09:52:18 -0500 Subject: [PATCH] Add virtual constructor to block codecs We construct codecs as a shared pointer to `BlockCodec` and without a virtual destructor, only the destructor of the base class is called. This has not caused any real issues because the codecs do not do any memory management, but this is now for correctness and future-proofing. Signed-off-by: Michal Siedlaczek --- .clang-tidy | 3 +++ include/pisa/codec/block_codec.hpp | 2 ++ include/pisa/codec/interpolative.hpp | 2 ++ include/pisa/codec/maskedvbyte.hpp | 2 ++ include/pisa/codec/optpfor.hpp | 2 ++ include/pisa/codec/qmx.hpp | 2 ++ include/pisa/codec/simdbp.hpp | 2 ++ include/pisa/codec/simple16.hpp | 2 ++ include/pisa/codec/simple8b.hpp | 2 ++ include/pisa/codec/streamvbyte.hpp | 2 ++ include/pisa/codec/varint_g8iu.hpp | 2 ++ include/pisa/codec/varintgb.hpp | 2 ++ 12 files changed, 25 insertions(+) diff --git a/.clang-tidy b/.clang-tidy index 3e9b48833..205a411e0 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -25,3 +25,6 @@ Checks: | -fuchsia-trailing-return, -llvm-header-guard, -google-runtime-references +CheckOptions: + - key: cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor + value: true diff --git a/include/pisa/codec/block_codec.hpp b/include/pisa/codec/block_codec.hpp index 9a7a8bc7b..e69f04130 100644 --- a/include/pisa/codec/block_codec.hpp +++ b/include/pisa/codec/block_codec.hpp @@ -13,6 +13,8 @@ namespace pisa { */ class BlockCodec { public: + virtual ~BlockCodec() = default; + /** * Encodes a list of `n` unsigned integers and appends them to the output buffer. */ diff --git a/include/pisa/codec/interpolative.hpp b/include/pisa/codec/interpolative.hpp index a362777e8..e8ee46727 100644 --- a/include/pisa/codec/interpolative.hpp +++ b/include/pisa/codec/interpolative.hpp @@ -19,6 +19,8 @@ class InterpolativeBlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_interpolative"; + virtual ~InterpolativeBlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; uint8_t const* diff --git a/include/pisa/codec/maskedvbyte.hpp b/include/pisa/codec/maskedvbyte.hpp index 0b3249982..285566541 100644 --- a/include/pisa/codec/maskedvbyte.hpp +++ b/include/pisa/codec/maskedvbyte.hpp @@ -19,6 +19,8 @@ class MaskedVByteBlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_maskedvbyte"; + virtual ~MaskedVByteBlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; uint8_t const* diff --git a/include/pisa/codec/optpfor.hpp b/include/pisa/codec/optpfor.hpp index 57790f38e..f3d281f60 100644 --- a/include/pisa/codec/optpfor.hpp +++ b/include/pisa/codec/optpfor.hpp @@ -26,6 +26,8 @@ class OptPForBlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_optpfor"; + virtual ~OptPForBlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; uint8_t const* diff --git a/include/pisa/codec/qmx.hpp b/include/pisa/codec/qmx.hpp index 17e3507ad..2e1926354 100644 --- a/include/pisa/codec/qmx.hpp +++ b/include/pisa/codec/qmx.hpp @@ -19,6 +19,8 @@ class QmxBlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_qmx"; + virtual ~QmxBlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; diff --git a/include/pisa/codec/simdbp.hpp b/include/pisa/codec/simdbp.hpp index 947a36361..d08d9df61 100644 --- a/include/pisa/codec/simdbp.hpp +++ b/include/pisa/codec/simdbp.hpp @@ -18,6 +18,8 @@ class SimdBpBlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_simdbp"; + virtual ~SimdBpBlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; uint8_t const* diff --git a/include/pisa/codec/simple16.hpp b/include/pisa/codec/simple16.hpp index 9c2fa7c80..034934e6f 100644 --- a/include/pisa/codec/simple16.hpp +++ b/include/pisa/codec/simple16.hpp @@ -17,6 +17,8 @@ class Simple16BlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_simple16"; + virtual ~Simple16BlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; uint8_t const* diff --git a/include/pisa/codec/simple8b.hpp b/include/pisa/codec/simple8b.hpp index c3fb995ac..ccd0280bc 100644 --- a/include/pisa/codec/simple8b.hpp +++ b/include/pisa/codec/simple8b.hpp @@ -16,6 +16,8 @@ class Simple8bBlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_simple8b"; + virtual ~Simple8bBlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; uint8_t const* diff --git a/include/pisa/codec/streamvbyte.hpp b/include/pisa/codec/streamvbyte.hpp index 930314606..32e0cccbe 100644 --- a/include/pisa/codec/streamvbyte.hpp +++ b/include/pisa/codec/streamvbyte.hpp @@ -32,6 +32,8 @@ class StreamVByteBlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_streamvbyte"; + virtual ~StreamVByteBlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; uint8_t const* diff --git a/include/pisa/codec/varint_g8iu.hpp b/include/pisa/codec/varint_g8iu.hpp index 8cc651d36..36966bcaa 100644 --- a/include/pisa/codec/varint_g8iu.hpp +++ b/include/pisa/codec/varint_g8iu.hpp @@ -22,6 +22,8 @@ class VarintG8IUBlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_varintg8iu"; + virtual ~VarintG8IUBlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; uint8_t const* diff --git a/include/pisa/codec/varintgb.hpp b/include/pisa/codec/varintgb.hpp index 2c9e766fc..b99abcb1a 100644 --- a/include/pisa/codec/varintgb.hpp +++ b/include/pisa/codec/varintgb.hpp @@ -242,6 +242,8 @@ class VarintGbBlockCodec: public BlockCodec { public: constexpr static std::string_view name = "block_varintgb"; + virtual ~VarintGbBlockCodec() = default; + void encode(uint32_t const* in, uint32_t sum_of_values, size_t n, std::vector& out) const override; uint8_t const*