void init_bit_source(struct bit_source* source, input_func_t* input_func, void* userdata)
{
memset(source, 0, sizeof(*source));
- source->bytes = (uint8_t*)malloc(bytereservoir_size);
+ source->bytes = (uint8_t*)malloc(BYTERESERVOIR_SIZE);
source->input_func = input_func;
source->userdata = userdata;
}
void possibly_refill_slow_path(struct bit_source* source, unsigned num_bits)
{
// First, make sure there's stuff in the byte reservoir if we can.
- assert(source->bytes_available <= bytereservoir_size);
+ assert(source->bytes_available <= BYTERESERVOIR_SIZE);
// Read data from the source until we have enough to satisfy the request.
while (source->bits_available + 8 * source->bytes_available < num_bits) {
- const size_t bytes_to_read = bytereservoir_size - source->bytes_available;
+ const size_t bytes_to_read = BYTERESERVOIR_SIZE - source->bytes_available;
const ssize_t bytes_read =
(*source->input_func)(source->userdata,
source->bytes + source->bytes_available,
// Fill the bit reservoir one by one byte until we have enough.
while (source->bits_available < num_bits) {
assert(source->bytes_available > 0);
- assert(source->bits_available + 8 <= bitreservoir_size);
+ assert(source->bits_available + 8 <= BITRESERVOIR_SIZE);
uint8_t byte = *(source->bytes);
++source->bytes;
--source->bytes_available;
- source->bits |= ((bitreservoir_t)byte << (bitreservoir_size - source->bits_available - 8));
+ source->bits |= ((bitreservoir_t)byte << (BITRESERVOIR_SIZE - source->bits_available - 8));
source->bits_available += 8;
}
}
return ntohl(*(bitreservoir_fill_t*)(source));
}
-static const unsigned bitreservoir_size = 8 * sizeof(bitreservoir_t);
-static const unsigned bitreservoir_fill_size = 8 * sizeof(bitreservoir_fill_t);
-static const unsigned bytereservoir_size = 4096;
+static const unsigned BITRESERVOIR_SIZE = 8 * sizeof(bitreservoir_t);
+static const unsigned BITRESERVOIR_FILL_SIZE = 8 * sizeof(bitreservoir_fill_t);
+static const unsigned BYTERESERVOIR_SIZE = 4096;
// A function to read bytes from some input source. The bytes should be
// already unstuffed (and thus without markers).
// refill A+B, read A, read B than refill A, read A, refill B, read B.
static inline void possibly_refill(struct bit_source* source, unsigned num_bits)
{
- assert(num_bits <= bitreservoir_fill_size + 1);
+ assert(num_bits <= BITRESERVOIR_FILL_SIZE + 1);
if (source->bits_available >= num_bits) {
// Fast path (~90% of invocations?)
}
// Slower path (~99% of remaining invocations?)
- assert(source->bits_available + bitreservoir_fill_size < bitreservoir_size);
+ assert(source->bits_available + BITRESERVOIR_FILL_SIZE < BITRESERVOIR_SIZE);
if (source->bytes_available >= sizeof(bitreservoir_fill_t)) {
bitreservoir_fill_t fill = read_bitreservoir_fill(source->bytes);
source->bytes += sizeof(bitreservoir_fill_t);
source->bytes_available -= sizeof(bitreservoir_fill_t);
- source->bits |= (bitreservoir_t)fill << (bitreservoir_size - bitreservoir_fill_size - source->bits_available);
- source->bits_available += bitreservoir_fill_size;
+ source->bits |= (bitreservoir_t)fill << (BITRESERVOIR_SIZE - BITRESERVOIR_FILL_SIZE - source->bits_available);
+ source->bits_available += BITRESERVOIR_FILL_SIZE;
return;
}
static inline unsigned read_bits(struct bit_source* source, unsigned num_bits)
{
assert(source->bits_available >= num_bits);
- unsigned ret = (source->bits >> (bitreservoir_size - num_bits));
+ unsigned ret = (source->bits >> (BITRESERVOIR_SIZE - num_bits));
source->bits <<= num_bits;
source->bits_available -= num_bits;
return ret;