X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Ftoolbox%2Fbitvector.c;h=bde41ff7ce95d2f4aecff7f569eede28e8d8ede1;hb=9f859ad50d3d5d98c185d40b86b2179bc4dc9aeb;hp=bedba3316646fb9c360fca5701c580fff70307a3;hpb=57f2e13ec5e98a95fdbea291123da9800a7f1852;p=cacao.git diff --git a/src/toolbox/bitvector.c b/src/toolbox/bitvector.c index bedba3316..bde41ff7c 100644 --- a/src/toolbox/bitvector.c +++ b/src/toolbox/bitvector.c @@ -26,7 +26,6 @@ Authors: Christian Ullrich - $Id: bitvector.c$ */ @@ -38,26 +37,51 @@ Bitvector Implementation - ******************************************************************************/ #ifdef BV_DEBUG_CHECK + /* Number of ints needed for size bits */ -# define BV_NUM_INTS(size) (((((size) + 7)/ 8) + sizeof(int) - 1) / sizeof(int) + 1) + +# define BV_NUM_INTS(size) (((((size) + 7)/ 8) + sizeof(int) - 1)\ + / sizeof(int) + 1) + /* Get index in bitvector */ + # define BV_INT_INDEX(bit) ( ((bit) / 8) / sizeof(int) + 1) + /* Get bit index inside int */ + # define BV_BIT_INDEX(bit, index) ( (bit) - (index - 1) * sizeof(int) * 8 ); + #else + /* Number of ints needed for size bits */ + # define BV_NUM_INTS(size) (((((size) + 7)/ 8) + sizeof(int) - 1) / sizeof(int)) + /* Get index in bitvector */ + # define BV_INT_INDEX(bit) ( ((bit) / 8) / sizeof(int) ) + /* Get bit index inside int */ + # define BV_BIT_INDEX(bit, index) ( (bit) - (index) * sizeof(int) * 8 ); + #endif +/************************************************************************ +bv_to_string +Transforms the bitvector bv to a string of 1's and 0's. + +IN: bitvector bv bitvector created with bv_new() + int size size of bitvector bv + +IN/OUT: char *string allocated buffer, at least size + 1 elements + +RETURN:pointer to string +******************************************************************************/ char *bv_to_string(bitvector bv, char *string, int size) { int i; @@ -73,12 +97,22 @@ char *bv_to_string(bitvector bv, char *string, int size) { return string; } -int *bv_new(int size) { +/****************************************************************************** +bv_new + +Creates a new bitvector and initializes all bits to 0. + +IN: int size size of bitvector bv + +RETURN: bitvector + +*******************************************************************************/ +bitvector bv_new(int size) { int i,n; int *bv; /* Number of ints needed for size bits */ -/* n = (((size+7)/8) + sizeof(int) - 1)/sizeof(int); */ + /* n = (((size+7)/8) + sizeof(int) - 1)/sizeof(int); */ n = BV_NUM_INTS(size); bv = DMNEW(int, n); @@ -92,6 +126,16 @@ int *bv_new(int size) { return bv; } +/****************************************************************************** +bv_get_bit + +Checks if a specific bit of the bitvector is set. + +IN: bitvector bv + int bit Index of bit to check (0..size( + +RETURN: bool true if bit is set otherwise false +*******************************************************************************/ bool bv_get_bit(bitvector bv, int bit) { int i, n; @@ -104,6 +148,14 @@ bool bv_get_bit(bitvector bv, int bit) { return (bv[i] & (1<