diff options
| author | Enrique | 2025-01-06 00:50:11 +0100 |
|---|---|---|
| committer | Enrique | 2025-01-06 00:50:11 +0100 |
| commit | 789169d70d24ff2c1c9804f0149d0508de6dfcfa (patch) | |
| tree | 088ec2ce664a13aeeb3603d0eee6c737caff7190 /bit/bit.h | |
| download | soikk-libs-789169d70d24ff2c1c9804f0149d0508de6dfcfa.tar.xz soikk-libs-789169d70d24ff2c1c9804f0149d0508de6dfcfa.tar.zst | |
First upload
Diffstat (limited to 'bit/bit.h')
| -rwxr-xr-x | bit/bit.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/bit/bit.h b/bit/bit.h new file mode 100755 index 0000000..9e1b09a --- /dev/null +++ b/bit/bit.h @@ -0,0 +1,42 @@ +#ifndef BIT_H +#define BIT_H + +/* + Most of these functions are courtesy of + Hacker's Delight, 2nd edition (Henry S. Warren, Jr.) +*/ + +#include <stdio.h> +#include "types/types.h" + + +// rounds down (floors) to the nearest power of 2 +u64 flp2(u64 x); + +// rounds down (floors) to the nearest power of 2 in 32 bits +u32 flp2_32(u32 x); + +// rounds up (ceils) to the nearest power of 2 +u64 clp2(u64 x); + +// rounds up (ceils) to the nearest power of 2 in 32 bits +u32 clp2_32(u32 x); + +// prints the bits of the data pointed to by ptr of size size to fp +void _bitstofile(void const * const ptr, size_t const size, FILE *fp); + +#define fprintb(n, f) ({ \ + typeof(n) _n = (n); \ + _bitstofile(&(_n), sizeof(_n), f); \ + }) + +#define printb(n) fprintb(n, stdout) + +#define fputb(n, f) ({ \ + fprintb(n, f); \ + fputc('\n', f); \ + }) + +#define putb(n) fputb(n, stdout) + +#endif |
