blob: b07cdf66dd56e0585337f1548f2e52e05023ce42 [file] [log] [blame]
/***************************************************************************
* 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 */