From dc228530bcd523d574408446ce93d98093205e7d Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Tue, 16 Jan 2024 01:36:27 +0100 Subject: a --- serialize/packbits-write.cpp | 3 ++- serialize/packbits-write.hpp | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/serialize/packbits-write.cpp b/serialize/packbits-write.cpp index 76b1398a..85130c12 100644 --- a/serialize/packbits-write.cpp +++ b/serialize/packbits-write.cpp @@ -13,7 +13,8 @@ static_assert(count_bits> == 0); //static_assert(count_bits >> == 0); //static_assert(count_bits, f8<2> >> == 9); -template u32 write_(output, std::index_sequence<0>, const std::tuple>&); +template u32 write_(const std::tuple>&, output, output_bits<32>, std::index_sequence<0>); +static_assert(write_(std::tuple>{4242}, output{0}, output_bits<32>{}, std::index_sequence<0>{}) == 4242); static_assert(output::next<1>::Capacity == 31); static_assert(output::next<1>::next<2>::Capacity == 29); diff --git a/serialize/packbits-write.hpp b/serialize/packbits-write.hpp index 8bcd14af..a0ebe2ff 100644 --- a/serialize/packbits-write.hpp +++ b/serialize/packbits-write.hpp @@ -58,8 +58,8 @@ struct output_field template struct count_bits_; - -template struct count_bits_, Ts...>> +template +struct count_bits_, Ts...>> { static constexpr size_t length = N + count_bits_>::length; static_assert(length <= sizeof(Int)*8); @@ -78,20 +78,20 @@ constexpr std::index_sequence reverse_index_sequence(st template using make_reverse_index_sequence = decltype(reverse_index_sequence(std::make_index_sequence{})); -template -constexpr T write_(output st, std::index_sequence, const Tuple& tuple) +template +constexpr T write_(const Tuple& tuple, output st, output_bits, std::index_sequence) { constexpr size_t N = std::tuple_element_t::Length; - if constexpr(Left != sizeof(T)*8) - st.value <<= N; + static_assert(Capacity <= sizeof(T)*8); + static_assert(Left <= Capacity); T x = std::get(tuple).value; T value = st.set(x, output_bits{}); using next = typename output::template next; - return write_(next{value}, std::index_sequence{}, tuple); + return write_(tuple, next{value}, std::index_sequence{}); } template -constexpr T write_(output st, std::index_sequence<>, const Tuple&) +constexpr T write_(const Tuple&, output st, std::index_sequence<>) { return st.value; } -- cgit v1.2.3