Pixie
Loading...
Searching...
No Matches
power_of_two_value_block.h
1#pragma once
2
3#include <pixie/permutations/detail/packed_value_block.h>
4
5#include <bit>
6#include <climits>
7#include <cstddef>
8#include <cstdint>
9#include <limits>
10
11namespace pixie::experimental {
12
24template <class T = std::uint64_t, std::size_t Values = 256>
26 : public permutations::detail::PackedValueBlock<
27 T,
28 sizeof(permutations::detail::BitBlock<
29 Values * std::numeric_limits<T>::digits>) *
30 CHAR_BIT,
31 std::numeric_limits<T>::digits,
32 permutations::detail::BitBlock<Values *
33 std::numeric_limits<T>::digits>> {
34 static_assert(std::has_single_bit(Values));
35 using Base = permutations::detail::PackedValueBlock<
36 T,
37 sizeof(permutations::detail::BitBlock<Values *
38 std::numeric_limits<T>::digits>) *
39 CHAR_BIT,
40 std::numeric_limits<T>::digits,
41 permutations::detail::BitBlock<Values * std::numeric_limits<T>::digits>>;
42
43 public:
44 using Base::Base;
47};
48
49} // namespace pixie::experimental
PowerOfTwoValueBlock() noexcept
Construct empty without initializing unused payload capacity.
Definition power_of_two_value_block.h:46
Definition excess.h:90