| /*************************************************************************** | |
| * 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 */ |