1*ca71c51bSBarry Smith /* $Id: bitarray.h,v 1.5 1996/02/05 15:21:03 balay Exp bsmith $ */ 2bd3dcc6dSSatish Balay 319fee000SSatish Balay /* 4*ca71c51bSBarry 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: 21*ca71c51bSBarry Smith The bit operations are equivalent to: 22*ca71c51bSBarry Smith 1: retval = array[index]; 2319fee000SSatish Balay 2: array[index] = 1; 2419fee000SSatish Balay 3: return retval; 2519fee000SSatish Balay */ 26*ca71c51bSBarry Smith #if !defined(__BITARRAY_H) 27*ca71c51bSBarry Smith 28e2e5485fSSatish Balay #if !defined(BITSPERBYTE) 29e2e5485fSSatish Balay #define BITSPERBYTE 8 30e2e5485fSSatish Balay #endif 31e2e5485fSSatish Balay 32*ca71c51bSBarry Smith typedef char* BT; 33*ca71c51bSBarry Smith 3419fee000SSatish Balay static char _mask, _BT_c; 3519fee000SSatish Balay static int _BT_idx; 36*ca71c51bSBarry Smith 37*ca71c51bSBarry Smith #define BTCreate(m,array) (array = (char *)PetscMalloc(((m)/BITSPERBYTE+1)*sizeof(char)),\ 38*ca71c51bSBarry Smith ( !array ) ? 1 : (BTMemzero(m,array),0) ) 39*ca71c51bSBarry Smith 40*ca71c51bSBarry Smith #define BTMemzero(m,array) PetscMemzero(array,(m)/BITSPERBYTE) 41*ca71c51bSBarry Smith 42*ca71c51bSBarry Smith #define BTLookupSet(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 4319fee000SSatish Balay _BT_c = array[_BT_idx], \ 44*ca71c51bSBarry Smith _mask = (char)1 << ((index)%BITSPERBYTE), \ 4519fee000SSatish Balay array[_BT_idx] = _BT_c|_mask, \ 4619fee000SSatish Balay _BT_c & _mask ) 4719fee000SSatish Balay 48*ca71c51bSBarry Smith #define BTSet(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 49*ca71c51bSBarry Smith _BT_c = array[_BT_idx], \ 50*ca71c51bSBarry Smith _mask = (char)1 << ((index)%BITSPERBYTE), \ 51*ca71c51bSBarry Smith array[_BT_idx] = _BT_c|_mask,0) 5219fee000SSatish Balay 53*ca71c51bSBarry Smith 54*ca71c51bSBarry Smith #define BTClear(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 55*ca71c51bSBarry Smith _BT_c = array[_BT_idx], \ 56*ca71c51bSBarry Smith _mask = (char)1 << ((index)%BITSPERBYTE), \ 57*ca71c51bSBarry Smith array[_BT_idx] = _BT_c & (~_mask),0) 58*ca71c51bSBarry Smith 59*ca71c51bSBarry Smith #define BTLookup(array, index) (_BT_idx = (index)/BITSPERBYTE, \ 60*ca71c51bSBarry Smith _BT_c = array[_BT_idx], \ 61*ca71c51bSBarry Smith _mask = (char)1 << ((index)%BITSPERBYTE), \ 62*ca71c51bSBarry Smith _BT_c & _mask ) 63*ca71c51bSBarry Smith 64*ca71c51bSBarry Smith 65*ca71c51bSBarry Smith #define BTDestroy(array) (PetscFree(array),0) 66*ca71c51bSBarry Smith 67*ca71c51bSBarry Smith #endif 68