blob: b240127aab0b3880d14339301a219a307fe8c681 [file] [log] [blame]
#ifndef BITS_H
#define BITS_H
/**
* Utility functions to operate on bits.
*/
#include <assert.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
/**
* Check whether a byte has a bit set.
*/
static inline bool
has_bit(uint8_t val, size_t index)
{
return val & (1 << index);
}
/**
* Extract a bit range from a byte.
*
* Both offsets are inclusive, start from zero, and high must be greater than low.
*/
static inline uint8_t
get_bit_range(uint8_t val, size_t high, size_t low)
{
size_t n;
uint8_t bitmask;
assert(high <= 7 && high >= low);
n = high - low + 1;
bitmask = (uint8_t) ((1 << n) - 1);
return (uint8_t) (val >> low) & bitmask;
}
#endif