From 7b96b68088c11a6bcb1242030b4f20c1d4ee672d Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 18 Jan 2024 19:11:54 +0100 Subject: a --- serialize/packbits-impl.cpp | 5 +++++ serialize/packbits-read.hpp | 6 +++++- serialize/packbits-write.cpp | 7 +++++++ serialize/packbits-write.hpp | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/serialize/packbits-impl.cpp b/serialize/packbits-impl.cpp index b7a4eefc..b03b31b6 100644 --- a/serialize/packbits-impl.cpp +++ b/serialize/packbits-impl.cpp @@ -8,4 +8,9 @@ void throw_on_read_nonzero() noexcept(false) throw std::runtime_error{"extra bits in pack_read()"}; } +void throw_on_write_input_bit_overflow() noexcept(false) +{ + throw std::runtime_error{"extra bits in pack_write()"}; +} + } // namespace floormat::Pack_impl diff --git a/serialize/packbits-read.hpp b/serialize/packbits-read.hpp index 0fea0ba5..d2622d49 100644 --- a/serialize/packbits-read.hpp +++ b/serialize/packbits-read.hpp @@ -84,7 +84,7 @@ requires requires (Field& x) { { size_t{Field::Length} > 0 }; sizeof(std::decay_t); - std::unsigned_integral>; + requires std::unsigned_integral>; } struct is_input_field : std::bool_constant {}; @@ -118,6 +118,10 @@ constexpr CORRADE_ALWAYS_INLINE void read_(Tuple&&, input st, std::inde namespace floormat { template constexpr void pack_read(Tuple&& tuple, T value) +requires requires (const Tuple& tuple) { + std::tuple_size_v > 0uz; + Pack_impl::is_input_field(tuple))>>::value; +} { constexpr size_t nbits = sizeof(T)*8, tuple_size = std::tuple_size_v>; diff --git a/serialize/packbits-write.cpp b/serialize/packbits-write.cpp index f261abe5..7dab800a 100644 --- a/serialize/packbits-write.cpp +++ b/serialize/packbits-write.cpp @@ -43,4 +43,11 @@ u32 foo1(u32 a, u32 b, u32 c) } // namespace +#if 0 +[[maybe_unused]] uint8_t test1(uint8_t a, uint8_t b, uint8_t c) +{ + return pack_write(std::tuple{f8<2>{a}, f8<3>{b}, f8<3>{c}}); +} +#endif + } // namespace floormat diff --git a/serialize/packbits-write.hpp b/serialize/packbits-write.hpp index 7df095c1..6d98181b 100644 --- a/serialize/packbits-write.hpp +++ b/serialize/packbits-write.hpp @@ -71,7 +71,7 @@ namespace floormat { template requires requires (const Tuple& tuple) { - std::tuple_size_v > size_t{0}; + std::tuple_size_v > 0uz; Pack_impl::is_output_field(tuple))>>::value; } [[nodiscard]] constexpr auto pack_write(const Tuple& tuple) -- cgit v1.2.3