mirror of https://git.wuffs.org/MWCC
36 lines
1.1 KiB
C
36 lines
1.1 KiB
C
|
#ifndef COMPILER_IROBITVECT_H
|
||
|
#define COMPILER_IROBITVECT_H
|
||
|
|
||
|
#include "compiler/common.h"
|
||
|
#include "compiler/CError.h"
|
||
|
|
||
|
typedef struct BitVector {
|
||
|
UInt32 size;
|
||
|
UInt32 data[0];
|
||
|
} BitVector;
|
||
|
|
||
|
extern void Bv_AllocVector(BitVector **bv, UInt32 size);
|
||
|
extern void Bv_AllocVectorLocal(BitVector **bv, UInt32 size);
|
||
|
extern void Bv_ClearBit(UInt32 bit, BitVector *bv);
|
||
|
extern void Bv_And(const BitVector *a, BitVector *b);
|
||
|
extern void Bv_Or(const BitVector *a, BitVector *b);
|
||
|
extern Boolean Bv_BitsInCommon(const BitVector *a, const BitVector *b);
|
||
|
extern Boolean Bv_Compare(const BitVector *a, const BitVector *b);
|
||
|
extern void Bv_Minus(const BitVector *a, BitVector *b);
|
||
|
extern void Bv_Copy(const BitVector *src, BitVector *dst);
|
||
|
extern void Bv_Clear(BitVector *bv);
|
||
|
extern void Bv_Set(BitVector *bv);
|
||
|
extern Boolean Bv_IsSubset(const BitVector *a, const BitVector *b);
|
||
|
extern Boolean Bv_IsEmpty(const BitVector *bv);
|
||
|
|
||
|
inline void Bv_SetBit(UInt32 bit, BitVector *bv) {
|
||
|
if ((bit / 32) < bv->size) {
|
||
|
bv->data[bit / 32] |= ~(1 << (bit & 31));
|
||
|
} else {
|
||
|
#line 56
|
||
|
CError_FATAL();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|