/*************************************************************************** * Copyright 1995, Technion, Israel Institute of Technology * Electrical Eng, Software Lab. * Author: Michael Veksler. *************************************************************************** * File: bit_array.h * Purpose : manipulate array of bits, * Important: operations may be considered atomic. * *************************************************************************** */ #ifndef __WINE_BIT_ARRAY_H #define __WINE_BIT_ARRAY_H #define BITS_PER_BYTE (8) #define BITS_PER_INT (sizeof(int)*BITS_PER_BYTE) /* must be power of 2 */ #define BYTE_LOG2 (3) #if defined(INT_LOG2) /* nothing to do, IN_LOG2 is ok */ #elif defined(__i386__) # define INT_LOG2 (5) #else # error "Can't find log2 of BITS_PER_INT, please code it manualy" #endif typedef struct bit_array { int bits; /* number of bits in the array */ unsigned int *array; /* Actual array data (Never NULL) */ } bit_array ; bit_array *AssembleArray(bit_array *new_array, unsigned int *buff, int bits); int ResetArray(bit_array *bits); /* Return index of first free bit, or -1 on failure */ int VacantBit(bit_array *bits); /* Return the value of bit 'i' */ int SampleBit(bit_array *bits, int i); /* Assign 'val' to a bit no. 'i'. Return: old bit's value */ int AssignBit(bit_array *bits, int i, int val); /* ** Allocate a free bit (==0) and make it used (==1). ** Return: allocated bit index, or -1 on failure. */ int AllocateBit(bit_array *bits); #endif /* __WINE_BIT_ARRAY_H */