1*1a89f835SSatish Balay /* $Id: bitarray.h,v 1.9 1997/12/12 19:36:14 bsmith Exp balay $ */ 2bd3dcc6dSSatish Balay 319fee000SSatish Balay /* 419fee000SSatish Balay 53b71518fSBarry Smith BT - Bit array objects: used to compactly store logical arrays of variables. 619fee000SSatish Balay 73b71518fSBarry Smith BTCreate(m,bt) - creates a bit array with enough room to hold m values 83b71518fSBarry Smith BTDestroy(bt) - destroys the bit array 93b71518fSBarry Smith BTMemzero(bt,bt) - zeros the entire bit array (sets all values to false) 103b71518fSBarry Smith BTSet(bt,index) - sets a particular entry as true 113b71518fSBarry Smith BTClear(bt,index) - sets a particular entry as false 123b71518fSBarry Smith BTLookup(bt,index) - returns the value 133b71518fSBarry Smith BTLookupSet(bt,index) - returns the value and then sets it true 143b71518fSBarry Smith BTLength(m) - returns number of bytes in array 153b71518fSBarry Smith BTView(m,bt) 1619fee000SSatish Balay 1719fee000SSatish Balay */ 18ca71c51bSBarry Smith #if !defined(__BITARRAY_H) 193b71518fSBarry Smith #define __BITARRAY_H 20ca71c51bSBarry Smith 21e2e5485fSSatish Balay #if !defined(BITSPERBYTE) 22e2e5485fSSatish Balay #define BITSPERBYTE 8 23e2e5485fSSatish Balay #endif 24e2e5485fSSatish Balay 25ca71c51bSBarry Smith typedef char* BT; 26ca71c51bSBarry Smith 27*1a89f835SSatish Balay extern char _BT_mask, _BT_c; 2835c17c5bSBarry Smith extern int _BT_idx; 29ca71c51bSBarry Smith 303b71518fSBarry Smith #define BTView(m,bt) {\ 313b71518fSBarry Smith int __i; \ 323b71518fSBarry Smith for (__i=0; __i<m; __i++) { \ 333b71518fSBarry Smith printf("%d %d\n",__i,BTLookup(bt,__i)); \ 343b71518fSBarry Smith }} 353b71518fSBarry Smith 363b71518fSBarry Smith #define BTLength(m) ((m)/BITSPERBYTE+1)*sizeof(char) 373b71518fSBarry Smith 38ca71c51bSBarry Smith #define BTCreate(m,array) (array = (char *)PetscMalloc(((m)/BITSPERBYTE+1)*sizeof(char)),\ 39ca71c51bSBarry Smith ( !array ) ? 1 : (BTMemzero(m,array),0) ) 40ca71c51bSBarry Smith 41f155196cSSatish Balay #define BTMemzero(m,array) PetscMemzero(array,(m)/BITSPERBYTE+1) 42ca71c51bSBarry Smith 43ca71c51bSBarry Smith #define BTLookupSet(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 4419fee000SSatish Balay _BT_c = array[_BT_idx], \ 45*1a89f835SSatish Balay _BT_mask = (char)1 << ((index)%BITSPERBYTE), \ 46*1a89f835SSatish Balay array[_BT_idx] = _BT_c | _BT_mask, \ 47*1a89f835SSatish Balay _BT_c & _BT_mask ) 4819fee000SSatish Balay 49ca71c51bSBarry Smith #define BTSet(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 50ca71c51bSBarry Smith _BT_c = array[_BT_idx], \ 51*1a89f835SSatish Balay _BT_mask = (char)1 << ((index)%BITSPERBYTE), \ 52*1a89f835SSatish Balay array[_BT_idx] = _BT_c | _BT_mask,0) 5319fee000SSatish Balay 54ca71c51bSBarry Smith 55ca71c51bSBarry Smith #define BTClear(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 56ca71c51bSBarry Smith _BT_c = array[_BT_idx], \ 57*1a89f835SSatish Balay _BT_mask = (char)1 << ((index)%BITSPERBYTE), \ 58*1a89f835SSatish Balay array[_BT_idx] = _BT_c & (~_BT_mask),0) 59ca71c51bSBarry Smith 60ca71c51bSBarry Smith #define BTLookup(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 61ca71c51bSBarry Smith _BT_c = array[_BT_idx], \ 62*1a89f835SSatish Balay _BT_mask = (char)1 << ((index)%BITSPERBYTE), \ 63*1a89f835SSatish Balay (_BT_c & _BT_mask) != 0 ) 64ca71c51bSBarry Smith 65ca71c51bSBarry Smith 66ca71c51bSBarry Smith #define BTDestroy(array) (PetscFree(array),0) 67ca71c51bSBarry Smith 68ca71c51bSBarry Smith #endif 69