52 using namespace internal;
53 using namespace utils;
54 static_assert(
sizeof(dst_T) <=
sizeof(uint32_t));
56 constexpr size_t PackingBufferBits = toBits<packing_type>();
58 auto unpackedData = unpack<packing_type>(srcPos - rBitOffset, rBitOffset);
61 unpackedData <<= PackingBufferBits - rBitOffset;
62 const uint32_t nLeadingZeros = __builtin_clzl(unpackedData);
63 uint32_t eliasDeltaBits = 2 * nLeadingZeros + 1;
64 const uint32_t highestPow2 =
bitExtract(unpackedData, PackingBufferBits - eliasDeltaBits, nLeadingZeros + 1) - 1;
65 eliasDeltaBits += highestPow2;
66 dst_T decodedValue =
static_cast<dst_T
>(pow2(highestPow2) +
bitExtract(unpackedData, PackingBufferBits - eliasDeltaBits, highestPow2));
68 srcPos -= eliasDeltaBits;