Bitfields of arbitrary length. More...
Bitfields of arbitrary length.
The bitfields in this module have their most significant bytes first and their most significant bits within each byte of the bitfield also first.
Files | |
| file | bitfield.h |
| Bitfield operations on bitfields of arbitrary length. | |
Macros | |
| #define | BITFIELD(NAME, SIZE) |
| Declare a bitfield of a given size. | |
Functions | |
| static void | bf_set (uint8_t field[], size_t idx) |
| Set the bit to 1. | |
| static void | bf_set_atomic (uint8_t field[], size_t idx) |
| Atomically set the bit to 1. | |
| static void | bf_unset (uint8_t field[], size_t idx) |
| Clear the bit. | |
| static void | bf_unset_atomic (uint8_t field[], size_t idx) |
| Atomically clear the bit. | |
| static void | bf_toggle (uint8_t field[], size_t idx) |
| Toggle the bit. | |
| static void | bf_toggle_atomic (uint8_t field[], size_t idx) |
| Atomically toggle the bit. | |
| static bool | bf_isset (const uint8_t field[], size_t idx) |
| Check if the bet is set. | |
| static void | bf_or (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len) |
Perform a bitwise OR operation on two bitfields out = a | b | |
| static void | bf_or_atomic (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len) |
Atomically perform a bitwise OR operation on two bitfields out = a | b | |
| static void | bf_and (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len) |
Perform a bitwise AND operation on two bitfields out = a & b | |
| static void | bf_and_atomic (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len) |
Atomically perform a bitwise AND operation on two bitfields out = a & b | |
| static void | bf_xor (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len) |
Perform a bitwise XOR operation on two bitfields out = a ^ b | |
| static void | bf_xor_atomic (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len) |
Atomically perform a bitwise XOR operation on two bitfields out = a ^ b | |
| static void | bf_inv (uint8_t out[], const uint8_t a[], size_t len) |
Perform a bitwise NOT operation on a bitfield out = ~a | |
| static void | bf_inv_atomic (uint8_t out[], const uint8_t a[], size_t len) |
Atomically perform a bitwise NOT operation on a bitfield out = ~a | |
| int | bf_get_unset (uint8_t field[], size_t len) |
| Atomically get the number of an unset bit and set it. | |
| int | bf_find_first_set (const uint8_t field[], size_t size) |
| Get the index of the first set bit in the field. | |
| int | bf_find_first_unset (const uint8_t field[], size_t size) |
| Get the index of the zero bit in the field. | |
| void | bf_set_all (uint8_t field[], size_t size) |
| Set all bits in the bitfield to 1. | |
| static void | bf_set_all_atomic (uint8_t field[], size_t size) |
| Atomically set all bits in the bitfield to 1. | |
| void | bf_clear_all (uint8_t field[], size_t size) |
| Clear all bits in the bitfield to 0. | |
| static void | bf_clear_all_atomic (uint8_t field[], size_t size) |
| Atomically clear all bits in the bitfield to 0. | |
| unsigned | bf_popcnt (const uint8_t field[], size_t size) |
| Count set bits in the bitfield. | |
| #define BITFIELD | ( | NAME, | |
| SIZE ) |
Declare a bitfield of a given size.
Definition at line 43 of file bitfield.h.
|
inlinestatic |
Perform a bitwise AND operation on two bitfields out = a & b
a, b and out must be at least len bits| [out] | out | The resulting bitfield |
| [in] | a | The first bitfield |
| [in] | b | The second bitfield |
| [in] | len | The number of bits in the bitfields |
Definition at line 186 of file bitfield.h.
|
inlinestatic |
Atomically perform a bitwise AND operation on two bitfields out = a & b
a, b and out must be at least len bits| [out] | out | The resulting bitfield |
| [in] | a | The first bitfield |
| [in] | b | The second bitfield |
| [in] | len | The number of bits in the bitfields |
Definition at line 208 of file bitfield.h.
| void bf_clear_all | ( | uint8_t | field[], |
| size_t | size ) |
Clear all bits in the bitfield to 0.
| [in] | field | The bitfield |
| [in] | size | The number of bits in the bitfield |
|
inlinestatic |
Atomically clear all bits in the bitfield to 0.
| [in] | field | The bitfield |
| [in] | size | The number of bits in the bitfield |
Definition at line 371 of file bitfield.h.
| int bf_find_first_set | ( | const uint8_t | field[], |
| size_t | size ) |
Get the index of the first set bit in the field.
| [in] | field | The bitfield |
| [in] | size | The number of bits in the bitfield |
| int bf_find_first_unset | ( | const uint8_t | field[], |
| size_t | size ) |
Get the index of the zero bit in the field.
| [in] | field | The bitfield |
| [in] | size | The number of bits in the bitfield |
| int bf_get_unset | ( | uint8_t | field[], |
| size_t | len ) |
Atomically get the number of an unset bit and set it.
This function can be used to record e.g., empty entries in an array.
| [in,out] | field | The bitfield |
| [in] | len | The number of bits in the bitfield to consider |
|
inlinestatic |
Perform a bitwise NOT operation on a bitfield out = ~a
a and out must be at least len bits| [out] | out | The resulting bitfield |
| [in] | a | The bitfield to invert |
| [in] | len | The number of bits in the bitfield |
Definition at line 273 of file bitfield.h.
|
inlinestatic |
Atomically perform a bitwise NOT operation on a bitfield out = ~a
a and out must be at least len bits| [out] | out | The resulting bitfield |
| [in] | a | The bitfield to invert |
| [in] | len | The number of bits in the bitfield |
Definition at line 294 of file bitfield.h.
|
inlinestatic |
Check if the bet is set.
| [in,out] | field | The bitfield |
| [in] | idx | The number of the bit to check |
Definition at line 123 of file bitfield.h.
|
inlinestatic |
Perform a bitwise OR operation on two bitfields out = a | b
a, b and out must be at least len bits| [out] | out | The resulting bitfield |
| [in] | a | The first bitfield |
| [in] | b | The second bitfield |
| [in] | len | The number of bits in the bitfields |
Definition at line 142 of file bitfield.h.
|
inlinestatic |
Atomically perform a bitwise OR operation on two bitfields out = a | b
a, b and out must be at least len bits| [out] | out | The resulting bitfield |
| [in] | a | The first bitfield |
| [in] | b | The second bitfield |
| [in] | len | The number of bits in the bitfields |
Definition at line 164 of file bitfield.h.
| unsigned bf_popcnt | ( | const uint8_t | field[], |
| size_t | size ) |
Count set bits in the bitfield.
| [in] | field | The bitfield |
| [in] | size | The number of bits in the bitfield |
|
inlinestatic |
Set the bit to 1.
| [in,out] | field | The bitfield |
| [in] | idx | The number of the bit to set |
Definition at line 51 of file bitfield.h.
| void bf_set_all | ( | uint8_t | field[], |
| size_t | size ) |
Set all bits in the bitfield to 1.
| [in] | field | The bitfield |
| [in] | size | The number of bits in the bitfield |
|
inlinestatic |
Atomically set all bits in the bitfield to 1.
| [in] | field | The bitfield |
| [in] | size | The number of bits in the bitfield |
Definition at line 350 of file bitfield.h.
|
inlinestatic |
Atomically set the bit to 1.
| [in,out] | field | The bitfield |
| [in] | idx | The number of the bit to set |
Definition at line 62 of file bitfield.h.
|
inlinestatic |
Toggle the bit.
| [in,out] | field | The bitfield |
| [in] | idx | The number of the bit to toggle |
Definition at line 99 of file bitfield.h.
|
inlinestatic |
Atomically toggle the bit.
| [in,out] | field | The bitfield |
| [in] | idx | The number of the bit to toggle |
Definition at line 110 of file bitfield.h.
|
inlinestatic |
Clear the bit.
| [in,out] | field | The bitfield |
| [in] | idx | The number of the bit to clear |
Definition at line 75 of file bitfield.h.
|
inlinestatic |
Atomically clear the bit.
| [in,out] | field | The bitfield |
| [in] | idx | The number of the bit to clear |
Definition at line 86 of file bitfield.h.
|
inlinestatic |
Perform a bitwise XOR operation on two bitfields out = a ^ b
a, b and out must be at least len bits| [out] | out | The resulting bitfield |
| [in] | a | The first bitfield |
| [in] | b | The second bitfield |
| [in] | len | The number of bits in the bitfields |
Definition at line 230 of file bitfield.h.
|
inlinestatic |
Atomically perform a bitwise XOR operation on two bitfields out = a ^ b
a, b and out must be at least len bits| [out] | out | The resulting bitfield |
| [in] | a | The first bitfield |
| [in] | b | The second bitfield |
| [in] | len | The number of bits in the bitfields |
Definition at line 252 of file bitfield.h.