1*bd3dcc6dSSatish Balay /* $Id: pc.h,v 1.52 1996/01/26 02:02:46 curfman Exp $ */ 2*bd3dcc6dSSatish Balay 319fee000SSatish Balay /* 419fee000SSatish Balay BT_LOOKUP - 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: 2119fee000SSatish Balay The bit operations are euivalent to: 2219fee000SSatish Balay 1: retval = array[idx]; 2319fee000SSatish Balay 2: array[index] = 1; 2419fee000SSatish Balay 3: return retval; 2519fee000SSatish Balay */ 2619fee000SSatish Balay 2719fee000SSatish Balay static char _mask, _BT_c; 2819fee000SSatish Balay static int _BT_idx; 2919fee000SSatish Balay #define BT_LOOKUP( array, index) (_BT_idx = index/8, \ 3019fee000SSatish Balay _BT_c = array[_BT_idx], \ 3119fee000SSatish Balay _BT_idx = index/8, \ 3219fee000SSatish Balay _mask = (char)1 << (index%8), \ 3319fee000SSatish Balay array[_BT_idx] = _BT_c|_mask, \ 3419fee000SSatish Balay _BT_c & _mask ) 3519fee000SSatish Balay 3619fee000SSatish Balay 37