1*f155196cSSatish Balay /* $Id: bitarray.h,v 1.6 1997/10/01 22:43:45 bsmith Exp balay $ */ 2bd3dcc6dSSatish Balay 319fee000SSatish Balay /* 4ca71c51bSBarry Smith BTSet - Expexts a charecter array -'array' as input, and 519fee000SSatish Balay treats it as an array of bits. It Checks if a given bit location 619fee000SSatish Balay ( specified by 'index') is marked, and later marks that location. 719fee000SSatish Balay 819fee000SSatish Balay Input: 919fee000SSatish Balay array - an array of char. Initially all bits are to be set to zero 1019fee000SSatish Balay by using PetscMemzero(). 1119fee000SSatish Balay index - specifies the index of the required bit in the bit array. 1219fee000SSatish Balay 1319fee000SSatish Balay Output: 1419fee000SSatish Balay return val - 0 if the bit is not found, 1519fee000SSatish Balay - nonzero if found. 1619fee000SSatish Balay 1719fee000SSatish Balay Usage : 1819fee000SSatish Balay BT_LOOKUP(char * array, int index) ; 1919fee000SSatish Balay 2019fee000SSatish Balay Summary: 21ca71c51bSBarry Smith The bit operations are equivalent to: 22ca71c51bSBarry Smith 1: retval = array[index]; 2319fee000SSatish Balay 2: array[index] = 1; 2419fee000SSatish Balay 3: return retval; 2519fee000SSatish Balay */ 26ca71c51bSBarry Smith #if !defined(__BITARRAY_H) 27ca71c51bSBarry Smith 28e2e5485fSSatish Balay #if !defined(BITSPERBYTE) 29e2e5485fSSatish Balay #define BITSPERBYTE 8 30e2e5485fSSatish Balay #endif 31e2e5485fSSatish Balay 32ca71c51bSBarry Smith typedef char* BT; 33ca71c51bSBarry Smith 3419fee000SSatish Balay static char _mask, _BT_c; 3519fee000SSatish Balay static int _BT_idx; 36ca71c51bSBarry Smith 37ca71c51bSBarry Smith #define BTCreate(m,array) (array = (char *)PetscMalloc(((m)/BITSPERBYTE+1)*sizeof(char)),\ 38ca71c51bSBarry Smith ( !array ) ? 1 : (BTMemzero(m,array),0) ) 39ca71c51bSBarry Smith 40*f155196cSSatish Balay #define BTMemzero(m,array) PetscMemzero(array,(m)/BITSPERBYTE+1) 41ca71c51bSBarry Smith 42ca71c51bSBarry Smith #define BTLookupSet(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 4319fee000SSatish Balay _BT_c = array[_BT_idx], \ 44ca71c51bSBarry Smith _mask = (char)1 << ((index)%BITSPERBYTE), \ 4519fee000SSatish Balay array[_BT_idx] = _BT_c | _mask, \ 4619fee000SSatish Balay _BT_c & _mask ) 4719fee000SSatish Balay 48ca71c51bSBarry Smith #define BTSet(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 49ca71c51bSBarry Smith _BT_c = array[_BT_idx], \ 50ca71c51bSBarry Smith _mask = (char)1 << ((index)%BITSPERBYTE), \ 51ca71c51bSBarry Smith array[_BT_idx] = _BT_c | _mask,0) 5219fee000SSatish Balay 53ca71c51bSBarry Smith 54ca71c51bSBarry Smith #define BTClear(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 55ca71c51bSBarry Smith _BT_c = array[_BT_idx], \ 56ca71c51bSBarry Smith _mask = (char)1 << ((index)%BITSPERBYTE), \ 57ca71c51bSBarry Smith array[_BT_idx] = _BT_c & (~_mask),0) 58ca71c51bSBarry Smith 59ca71c51bSBarry Smith #define BTLookup(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 60ca71c51bSBarry Smith _BT_c = array[_BT_idx], \ 61ca71c51bSBarry Smith _mask = (char)1 << ((index)%BITSPERBYTE), \ 62ca71c51bSBarry Smith _BT_c & _mask ) 63ca71c51bSBarry Smith 64ca71c51bSBarry Smith 65ca71c51bSBarry Smith #define BTDestroy(array) (PetscFree(array),0) 66ca71c51bSBarry Smith 67ca71c51bSBarry Smith #endif 68