Loading...
Searching...
No Matches
bitvec.c File Reference
Bit vectors
`#include <errno.h>`
`#include <stdint.h>`
`#include <string.h>`
`#include <stdio.h>`
`#include <stdbool.h>`
`#include <osmocom/core/bits.h>`
`#include <osmocom/core/bitvec.h>`
`#include <osmocom/core/panic.h>`
`#include <osmocom/core/utils.h>`

## Macros

#define | BITNUM_FROM_COMP(byte, bit) ((byte*8)+bit)

## Functions

static unsigned int | bytenum_from_bitnum (unsigned int bitnum)
static uint8_t | bitval2mask (enum bit_value bit, uint8_t bitnum)
enum bit_value | bitvec_get_bit_pos (const struct bitvec *bv, unsigned int bitnr)
| check if the bit is 0 or 1 for a given position inside a bitvec
enum bit_value | bitvec_get_bit_pos_high (const struct bitvec *bv, unsigned int bitnr)
| check if the bit is L or H for a given position inside a bitvec
unsigned int | bitvec_get_nth_set_bit (const struct bitvec *bv, unsigned int n)
| get the Nth set bit inside the bit vector
int | bitvec_set_bit_pos (struct bitvec *bv, unsigned int bitnr, enum bit_value bit)
| set a bit at given position in a bit vector
int | bitvec_set_bit (struct bitvec *bv, enum bit_value bit)
| set the next bit inside a bitvec
int | bitvec_get_bit_high (struct bitvec *bv)
| get the next bit (low/high) inside a bitvec
int | bitvec_set_bits (struct bitvec *bv, const enum bit_value *bits, unsigned int count)
| set multiple bits (based on array of bitvals) at current pos
int | bitvec_set_u64 (struct bitvec *bv, uint64_t v, uint8_t num_bits, bool use_lh)
| set multiple bits (based on numeric value) at current pos.
int | bitvec_set_uint (struct bitvec *bv, unsigned int ui, unsigned int num_bits)
| set multiple bits (based on numeric value) at current pos.
int16_t | bitvec_get_int16_msb (const struct bitvec *bv, unsigned int num_bits)
| get multiple bits (num_bits) from beginning of vector (MSB side)
int | bitvec_get_uint (struct bitvec *bv, unsigned int num_bits)
| get multiple bits (based on numeric value) from current pos
int | bitvec_fill (struct bitvec *bv, unsigned int num_bits, enum bit_value fill)
| fill num_bits with \fill starting from the current position
int | bitvec_spare_padding (struct bitvec *bv, unsigned int up_to_bit)
| pad all remaining bits up to a given bit number
int | bitvec_find_bit_pos (const struct bitvec *bv, unsigned int n, enum bit_value val)
| find first bit set in bit vector
int | bitvec_get_bytes (struct bitvec *bv, uint8_t *bytes, unsigned int count)
| get multiple bytes from current pos Assumes MSB first encoding.
int | bitvec_set_bytes (struct bitvec *bv, const uint8_t *bytes, unsigned int count)
| set multiple bytes at current pos Assumes MSB first encoding.
struct bitvec * | bitvec_alloc (unsigned int size, void *ctx)
| Allocate a bit vector.
void | bitvec_free (struct bitvec *bv)
| Free a bit vector (release its memory)
unsigned int | bitvec_pack (const struct bitvec *bv, uint8_t *buffer)
| Export a bit vector to a buffer.
unsigned int | bitvec_unpack (struct bitvec *bv, const uint8_t *buffer)
| Copy buffer of unpacked bits into bit vector.
int | bitvec_unhex (struct bitvec *bv, const char *src)
| read hexadecimap string into a bit vector
uint64_t | bitvec_read_field (struct bitvec *bv, unsigned int *read_index, unsigned int len)
| read part of the vector
int | bitvec_write_field (struct bitvec *bv, unsigned int *write_index, uint64_t val, unsigned int len)
| write into the vector
char | bit_value_to_char (enum bit_value v)
| convert enum to corresponding character
void | bitvec_to_string_r (const struct bitvec *bv, char *str)
| prints bit vector to provided string It's caller's responsibility to ensure that we won't shoot him in the foot: the provided buffer should be at lest cur_bit + 1 bytes long
static unsigned | leading_bits (uint8_t x, bool b)
void | bitvec_zero (struct bitvec *bv)
| force bit vector to all 0 and current bit to the beginnig of the vector
unsigned | bitvec_rl (const struct bitvec *bv, bool b)
| Return number (bits) of uninterrupted bit run in vector starting from the MSB.
unsigned | bitvec_rl_curbit (struct bitvec *bv, bool b, unsigned int max_bits)
| Return number (bits) of uninterrupted bit run in vector starting from the current bit.
void | bitvec_shiftl (struct bitvec *bv, unsigned n)
| Shifts bitvec to the left, n MSB bits lost.
unsigned int | bitvec_add_array (struct bitvec *bv, const uint32_t *array, unsigned int array_len, bool dry_run, unsigned int num_bits)
| Add given array to bitvec.