summaryrefslogtreecommitdiff
path: root/libpsx/include/bitstring.h
diff options
context:
space:
mode:
authorXavi Del Campo <xavi.dcr@tutanota.com>2020-01-31 10:32:23 +0100
committerXavi Del Campo <xavi.dcr@tutanota.com>2020-01-31 10:32:23 +0100
commit7c24e9a9b02b04dcaf9507acb94091ea70a2c02d (patch)
treec28d0748652ad4b4222309e46e6cfc82c0906220 /libpsx/include/bitstring.h
parenta2b7b6bb1cc2f4a3258b7b2dbc92399d151f864d (diff)
downloadpsxsdk-7c24e9a9b02b04dcaf9507acb94091ea70a2c02d.tar.gz
Imported pristine psxsdk-20190410 from official repo
Diffstat (limited to 'libpsx/include/bitstring.h')
-rw-r--r--libpsx/include/bitstring.h78
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