From 5f349be820b32a5bb312566a4a35ef679fe7e478 Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Mon, 21 Dec 2015 16:04:03 +0100 Subject: bitvec: Add get/set byte sequences The new functions bitvec_get_bytes and bitvec_set_bytes copy byte sequences from bitvecs to uint8_t arrays and vice versa. While the bytes in the bitvecs do not need to be aligned, the uint8_t arrays always are. In case the bytes in the bitvec are aligned, the implementation uses memcpy. Note that the implementation like the other existing functions assume MSB first encoding. [hfreyther: Squash the comment fix into this commit as well] Sponsored-by: On-Waves ehf --- include/osmocom/core/bitvec.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'include/osmocom/core') diff --git a/include/osmocom/core/bitvec.h b/include/osmocom/core/bitvec.h index 62e2e7b6..89eb7848 100644 --- a/include/osmocom/core/bitvec.h +++ b/include/osmocom/core/bitvec.h @@ -28,6 +28,14 @@ /*! \file bitvec.h * \brief Osmocom bit vector abstraction + * + * These functions assume a MSB (most significant bit) first layout of the + * bits, so that for instance the 5 bit number abcde (a is MSB) can be + * embedded into a byte sequence like in xxxxxxab cdexxxxx. The bit count + * starts with the MSB, so the bits in a byte are numbered (MSB) 01234567 (LSB). + * Note that there are other incompatible encodings, like it is used + * for the EGPRS RLC data block headers (there the bits are numbered from LSB + * to MSB). */ #include @@ -63,5 +71,7 @@ int bitvec_set_uint(struct bitvec *bv, unsigned int in, int count); int bitvec_get_uint(struct bitvec *bv, int num_bits); int bitvec_find_bit_pos(const struct bitvec *bv, unsigned int n, enum bit_value val); int bitvec_spare_padding(struct bitvec *bv, unsigned int up_to_bit); +int bitvec_get_bytes(struct bitvec *bv, uint8_t *bytes, int count); +int bitvec_set_bytes(struct bitvec *bv, const uint8_t *bytes, int count); /*! @} */ -- cgit v1.2.3