29 static_assert(Order <= 63,
"exponential-Golomb order must be at most 63");
31 template <std::u
int64_t M>
struct golomb {
32 static_assert(M != 0,
"Golomb modulus must be positive");
35 namespace policy_detail {
38 static_assert(Order <= 63,
"exponential-Golomb order must be at most 63");
40 static constexpr std::uint64_t parameter = Order;
43 static_assert(M != 0,
"Golomb modulus must be positive");
45 static constexpr std::uint64_t parameter = M;
52 template <
class Registry = unsorted<std::optional<std::
string>>, std::u
int64_t GroupSize = 15,
53 class BackspaceCode = exponential_golomb<0>, std::u
int64_t CodecBlockSize = GroupSize,
54 simd::architecture Arch = simd::scalar>
60 static_assert(GroupSize >= 3 && GroupSize != std::numeric_limits<std::uint64_t>::max() &&
61 std::has_single_bit(GroupSize + 1),
"group size must be 2^n - 1 and at least three");
63 "byte profiles use varints and require the default backspace policy");
64 static_assert(CodecBlockSize && CodecBlockSize <= std::numeric_limits<std::uint32_t>::max(),
65 "codec block size must fit a positive 32-bit count");
71 static constexpr unsigned class_bits =
static_cast<unsigned>(std::bit_width(GroupSize));
80 template <simd::architecture Arch,
class Registry = unsorted<std::optional<std::
string>>,
81 std::u
int64_t GroupSize = 15,
class BackspaceCode = exponential_golomb<0>,
82 std::u
int64_t CodecBlockSize = GroupSize>
Shares explicit SIMD architecture traits with Everett's kernels.
Definition active_engine.h:18
stream_role
Definition policy.h:25
bit_backspace_code
Definition policy.h:27
profile_unit
Definition registry.h:29
Describes sort codes, encoding requirements and typed registry dispatch.
Definition registry.h:217
static constexpr profile_unit unit
Definition registry.h:222
static constexpr bool fixed_width
Definition registry.h:226
static constexpr auto value_width
Definition registry.h:224
static constexpr std::uint64_t group_size
Definition policy.h:69
Registry registry_type
Definition policy.h:57
Arch architecture
Definition policy.h:56
static constexpr unsigned unit_shift
Definition policy.h:72
BackspaceCode backspace_encoding
Definition policy.h:66
static constexpr std::uint64_t codec_block_size
Definition policy.h:70
static constexpr profile_unit unit
Definition policy.h:59
static constexpr std::optional< std::uint64_t > value_width
Definition policy.h:75
static constexpr unsigned class_bits
Definition policy.h:71
static constexpr std::uint64_t backspace_parameter
Definition policy.h:68
static constexpr unsigned bits_per_unit
Definition policy.h:73
static constexpr bit_backspace_code backspace_code
Definition policy.h:67
static constexpr bool fixed_width
Definition policy.h:74