Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
bitarray.h File Reference
#include <stddef.h>
#include <stdint.h>
#include <kernel.h>

Go to the source code of this file.

Data Structures

struct  sys_bitarray
 

Macros

#define SYS_BITARRAY_DEFINE(name, total_bits)
 Create a bitarray object. More...
 

Typedefs

typedef struct sys_bitarray sys_bitarray_t
 

Functions

int sys_bitarray_set_bit (sys_bitarray_t *bitarray, size_t bit)
 
int sys_bitarray_clear_bit (sys_bitarray_t *bitarray, size_t bit)
 
int sys_bitarray_test_bit (sys_bitarray_t *bitarray, size_t bit, int *val)
 
int sys_bitarray_test_and_set_bit (sys_bitarray_t *bitarray, size_t bit, int *prev_val)
 
int sys_bitarray_test_and_clear_bit (sys_bitarray_t *bitarray, size_t bit, int *prev_val)
 
int sys_bitarray_alloc (sys_bitarray_t *bitarray, size_t num_bits, size_t *offset)
 
int sys_bitarray_free (sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
 
bool sys_bitarray_is_region_set (sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
 
bool sys_bitarray_is_region_cleared (sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
 
int sys_bitarray_set_region (sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
 
int sys_bitarray_clear_region (sys_bitarray_t *bitarray, size_t num_bits, size_t offset)
 

Macro Definition Documentation

◆ SYS_BITARRAY_DEFINE

#define SYS_BITARRAY_DEFINE (   name,
  total_bits 
)
Value:
uint32_t _sys_bitarray_bundles_##name \
[(((total_bits + 8 - 1) / 8) + sizeof(uint32_t) - 1) \
/ sizeof(uint32_t)] = {0U}; \
sys_bitarray_t name = { \
.num_bits = total_bits, \
.num_bundles = (((total_bits + 8 - 1) / 8) \
+ sizeof(uint32_t) - 1) \
/ sizeof(uint32_t), \
.bundles = _sys_bitarray_bundles_##name, \
}
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60

Create a bitarray object.

Parameters
nameName of the bitarray object.
total_bitsTotal number of bits in this bitarray object.

Typedef Documentation

◆ sys_bitarray_t

typedef struct sys_bitarray sys_bitarray_t

Function Documentation

◆ sys_bitarray_alloc()

int sys_bitarray_alloc ( sys_bitarray_t bitarray,
size_t  num_bits,
size_t *  offset 
)

Allocate bits in a bit array

This finds a number of bits (num_bits) in a contiguous of previosly unallocated region. If such a region exists, the bits are marked as allocated and the offset to the start of this region is returned via offset.

Parameters
[in]bitarrayBitarray struct
[in]num_bitsNumber of bits to allocate
[out]offsetOffset to the start of allocated region if successful
Return values
0Allocation successful
-EINVALInvalid argument (e.g. allocating more bits than the bitarray has, trying to allocate 0 bits, etc.)
-ENOSPCNo contiguous region big enough to accommodate the allocation

◆ sys_bitarray_clear_bit()

int sys_bitarray_clear_bit ( sys_bitarray_t bitarray,
size_t  bit 
)

Clear a bit in a bit array

Parameters
[in]bitarrayBitarray struct
[in]bitThe bit to be cleared
Return values
0Operation successful
-EINVALInvalid argument (e.g. bit to clear exceeds the number of bits in bit array, etc.)

◆ sys_bitarray_clear_region()

int sys_bitarray_clear_region ( sys_bitarray_t bitarray,
size_t  num_bits,
size_t  offset 
)

Clear all bits in a region.

This clears the number of bits (num_bits) in region starting from offset.

Parameters
bitarrayBitarray struct
num_bitsNumber of bits to test
offsetStarting bit position to test
Return values
0Operation successful
-EINVALInvalid argument (e.g. bit to set exceeds the number of bits in bit array, etc.)

◆ sys_bitarray_free()

int sys_bitarray_free ( sys_bitarray_t bitarray,
size_t  num_bits,
size_t  offset 
)

Free bits in a bit array

This marks the number of bits (num_bits) starting from offset as no longer allocated.

Parameters
bitarrayBitarray struct
num_bitsNumber of bits to free
offsetStarting bit position to free
Return values
0Free is successful
-EINVALInvalid argument (e.g. try to free more bits than the bitarray has, trying to free 0 bits, etc.)
-EFAULTThe bits in the indicated region are not all allocated.

◆ sys_bitarray_is_region_cleared()

bool sys_bitarray_is_region_cleared ( sys_bitarray_t bitarray,
size_t  num_bits,
size_t  offset 
)

Test if bits in a region is all cleared.

This tests if the number of bits (num_bits) in region starting from offset are all cleared.

Parameters
bitarrayBitarray struct
num_bitsNumber of bits to test
offsetStarting bit position to test
Return values
trueAll bits are cleared.
falseNot all bits are cleared.

◆ sys_bitarray_is_region_set()

bool sys_bitarray_is_region_set ( sys_bitarray_t bitarray,
size_t  num_bits,
size_t  offset 
)

Test if bits in a region is all set.

This tests if the number of bits (num_bits) in region starting from offset are all set.

Parameters
bitarrayBitarray struct
num_bitsNumber of bits to test
offsetStarting bit position to test
Return values
trueAll bits are set.
falseNot all bits are set.

◆ sys_bitarray_set_bit()

int sys_bitarray_set_bit ( sys_bitarray_t bitarray,
size_t  bit 
)

Set a bit in a bit array

Parameters
[in]bitarrayBitarray struct
[in]bitThe bit to be set
Return values
0Operation successful
-EINVALInvalid argument (e.g. bit to set exceeds the number of bits in bit array, etc.)

◆ sys_bitarray_set_region()

int sys_bitarray_set_region ( sys_bitarray_t bitarray,
size_t  num_bits,
size_t  offset 
)

Set all bits in a region.

This sets the number of bits (num_bits) in region starting from offset.

Parameters
bitarrayBitarray struct
num_bitsNumber of bits to test
offsetStarting bit position to test
Return values
0Operation successful
-EINVALInvalid argument (e.g. bit to set exceeds the number of bits in bit array, etc.)

◆ sys_bitarray_test_and_clear_bit()

int sys_bitarray_test_and_clear_bit ( sys_bitarray_t bitarray,
size_t  bit,
int *  prev_val 
)

Test the bit and clear it

Parameters
[in]bitarrayBitarray struct
[in]bitThe bit to be tested and cleared
[out]prev_valPrevious value of the bit (0 or 1)
Return values
0Operation successful
-EINVALInvalid argument (e.g. bit to test exceeds the number of bits in bit array, etc.)

◆ sys_bitarray_test_and_set_bit()

int sys_bitarray_test_and_set_bit ( sys_bitarray_t bitarray,
size_t  bit,
int *  prev_val 
)

Test the bit and set it

Parameters
[in]bitarrayBitarray struct
[in]bitThe bit to be tested and set
[out]prev_valPrevious value of the bit (0 or 1)
Return values
0Operation successful
-EINVALInvalid argument (e.g. bit to test exceeds the number of bits in bit array, etc.)

◆ sys_bitarray_test_bit()

int sys_bitarray_test_bit ( sys_bitarray_t bitarray,
size_t  bit,
int *  val 
)

Test whether a bit is set or not

Parameters
[in]bitarrayBitarray struct
[in]bitThe bit to be tested
[out]valThe value of the bit (0 or 1)
Return values
0Operation successful
-EINVALInvalid argument (e.g. bit to test exceeds the number of bits in bit array, etc.)