tweak the bitfield code to be a little faster.

This commit is contained in:
Charles Kerr
2007-09-25 17:43:39 +00:00
parent 1d1a23508b
commit dd8dc4d87e
2 changed files with 12 additions and 13 deletions
+11 -10
View File
@@ -750,15 +750,18 @@ tr_bitfieldIsEmpty( const tr_bitfield * bitfield )
return 1;
}
#define BIN(nth) ((nth>>3))
#define BIT(nth) (1<<(7-(nth%8)))
int
tr_bitfieldHas( const tr_bitfield * bitfield, size_t nth )
{
static const uint8_t ands[8] = { 128, 64, 32, 16, 8, 4, 2, 1 };
return bitfield!=NULL && (bitfield->bits[nth>>3u] & ands[nth&7u] );
}
void
tr_bitfieldAdd( tr_bitfield * bitfield, size_t nth )
{
assert( bitfield != NULL );
assert( BIN(nth) < bitfield->len );
bitfield->bits[ BIN(nth) ] |= BIT(nth);
static const uint8_t ands[8] = { 128, 64, 32, 16, 8, 4, 2, 1 };
bitfield->bits[nth>>3u] |= ands[nth&7u];
}
void
@@ -776,12 +779,10 @@ void
tr_bitfieldRem( tr_bitfield * bitfield,
size_t nth )
{
static const uint8_t rems[8] = { 127, 191, 223, 239, 247, 251, 253, 254 };
if( bitfield != NULL )
{
const size_t bin = BIN(nth);
assert( bin < bitfield->len );
bitfield->bits[bin] &= ~BIT(nth);
}
bitfield->bits[nth>>3u] &= rems[nth&7u];
}
void
+1 -3
View File
@@ -179,13 +179,11 @@ void tr_bitfieldRem( tr_bitfield*, size_t bit );
void tr_bitfieldAddRange( tr_bitfield *, size_t begin, size_t end );
void tr_bitfieldRemRange ( tr_bitfield*, size_t begin, size_t end );
int tr_bitfieldHas( const tr_bitfield*, size_t bit );
int tr_bitfieldIsEmpty( const tr_bitfield* );
size_t tr_bitfieldCountTrueBits( const tr_bitfield* );
tr_bitfield* tr_bitfieldNegate( tr_bitfield* );
tr_bitfield* tr_bitfieldAnd( tr_bitfield*, const tr_bitfield* );
#define tr_bitfieldHas(bitfield,nth) \
( ( bitfield ) && ( (bitfield)->bits[(nth)>>3] & 128 >>( (nth) & 7 ) ) )
#endif