mirror of
https://github.com/transmission/transmission.git
synced 2026-05-08 09:39:08 +01:00
tweak the bitfield code to be a little faster.
This commit is contained in:
+11
-10
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user