mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-23 06:41:32 +02:00
MINOR: tools: add new bitmap manipulation functions
We now have ha_bit_{set,clr,flip,test} to manipulate bitfields made of arrays of longs. The goal is to get rid of the remaining non-portable FD_{SET,CLR,ISSET} that still exist at a few places.
This commit is contained in:
parent
7348119fb2
commit
7355b040d1
@ -891,6 +891,30 @@ static inline unsigned long nbits(int bits)
|
||||
return (2UL << bits) - 1;
|
||||
}
|
||||
|
||||
/* sets bit <bit> into map <map>, which must be long-aligned */
|
||||
static inline void ha_bit_set(unsigned long bit, long *map)
|
||||
{
|
||||
map[bit / (8 * sizeof(*map))] |= 1UL << (bit & (8 * sizeof(*map) - 1));
|
||||
}
|
||||
|
||||
/* clears bit <bit> from map <map>, which must be long-aligned */
|
||||
static inline void ha_bit_clr(unsigned long bit, long *map)
|
||||
{
|
||||
map[bit / (8 * sizeof(*map))] &= ~(1UL << (bit & (8 * sizeof(*map) - 1)));
|
||||
}
|
||||
|
||||
/* flips bit <bit> from map <map>, which must be long-aligned */
|
||||
static inline void ha_bit_flip(unsigned long bit, long *map)
|
||||
{
|
||||
map[bit / (8 * sizeof(*map))] ^= 1UL << (bit & (8 * sizeof(*map) - 1));
|
||||
}
|
||||
|
||||
/* returns non-zero if bit <bit> from map <map> is set, otherwise 0 */
|
||||
static inline int ha_bit_test(unsigned long bit, const long *map)
|
||||
{
|
||||
return !!(map[bit / (8 * sizeof(*map))] & 1UL << (bit & (8 * sizeof(*map) - 1)));
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse binary string written in hexadecimal (source) and store the decoded
|
||||
* result into binstr and set binstrlen to the lengh of binstr. Memory for
|
||||
|
Loading…
x
Reference in New Issue
Block a user