#ifndef BITS_H #define BITS_H /** * Utility functions to operate on bits. */ #include #include #include #include /** * 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