/* * BIT ARRAY FUNCTIONS */ inline bool is_set( int* array, int bit ) { int i = bit/32; int j = bit-32*i; return( ( array[i] & ( 1 << j ) ) != 0 ); } inline void switch_bit( int* array, int bit ) { int i = bit/32; int j = bit-32*i; array[i] ^= ( 1 << j ); return; } inline void set_bit( int* array, int bit ) { int i = bit/32; int j = bit-32*i; array[i] |= ( 1 << j ); return; } inline void remove_bit( int* array, int bit ) { int i = bit/32; int j = bit-32*i; array[i] &= ~( 1 << j ); return; } inline void assign_bit( int* array, int bit, bool value ) { if( value ) set_bit( array, bit ); else remove_bit( array, bit ); return; } /* * LEVEL FUNCTIONS */ inline void set_level( int* array, int bit, int level ) { assign_bit( array, 2*bit, is_set( &level, 0 ) ); assign_bit( array, 2*bit+1, is_set( &level, 1 ) ); return; } inline int level_setting( int* array, int bit ) { int i = bit/16; int j = 2*(bit-16*i); int level; level = ( array[i] >> j ) & 3; return level; }