diff options
| author | Xavi Del Campo <xavi.dcr@tutanota.com> | 2020-01-31 10:32:23 +0100 |
|---|---|---|
| committer | Xavi Del Campo <xavi.dcr@tutanota.com> | 2020-01-31 10:32:23 +0100 |
| commit | 7c24e9a9b02b04dcaf9507acb94091ea70a2c02d (patch) | |
| tree | c28d0748652ad4b4222309e46e6cfc82c0906220 /libpsx/include/bitstring.h | |
| parent | a2b7b6bb1cc2f4a3258b7b2dbc92399d151f864d (diff) | |
| download | psxsdk-7c24e9a9b02b04dcaf9507acb94091ea70a2c02d.tar.gz | |
Imported pristine psxsdk-20190410 from official repo
Diffstat (limited to 'libpsx/include/bitstring.h')
| -rw-r--r-- | libpsx/include/bitstring.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/libpsx/include/bitstring.h b/libpsx/include/bitstring.h new file mode 100644 index 0000000..a9b4c32 --- /dev/null +++ b/libpsx/include/bitstring.h @@ -0,0 +1,78 @@ +/** + * PSXSDK + * + * bitstring.h + * + * Implementation of bitstring.h, a family of macros found in *BSD + * to manipulate bit strings + */ + +#ifndef _BITSTRING_H +#define _BITSTRING_H + +#include <stdlib.h> + +typedef unsigned char bitstr_t; + +#define bitstr_size(nbits) \ + ( (nbits + 7) >> 3 ) + +#define bit_alloc(nbits) \ + calloc( bitstr_size(nbits) , 1) + +#define bit_decl(name, nbits) \ + name[ bitstr_size(nbits) ] + +#define bit_clear(name, bit) \ + name[ bit >> 3 ] &= ~(1 << (bit & 7) ) + +#define bit_set(name, bit) \ + name[ bit >> 3] |= 1 << (bit & 7) + +#define bit_nclear(name, start, stop) \ + do{ \ + int _b__;\ + for(_b__ = start; _b__ <= stop; _b__++) \ + bit_clear(name, _b__);\ + }while(0) + +#define bit_nset(name, start, stop) \ + do{ \ + int _b__;\ + for(_b__ = start; _b__ <= stop; _b__++) \ + bit_set(name, _b__); \ + }while(0) + +#define bit_test(name, bit) \ + ( name[bit >> 3] & (1 << (bit & 7) ) ) + +#define bit_ffs(name, nbits, value) \ + do{\ + int _b__;\ + for(_b__ = 0; _b__ < nbits; _b__++) \ + {\ + printf("bb = %d\n", _b__);\ + if( bit_test(name, _b__) ) \ + {\ + *(value) = _b__; \ + break; \ + }\ + }\ + if( _b__ == nbits ) *(value) = -1;\ + }while(0) + +#define bit_ffc(name, nbits, value) \ + do{\ + int _b__;\ + for(_b__ = 0; _b__ < nbits; _b__++) \ + {\ + if( !bit_test(name, _b__) ) \ + {\ + *(value) = _b__; \ + break; \ + }\ + }\ + if( _b__ == nbits ) *(value) = -1;\ + }while(0) + +#endif |
