projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add stand alone module for read internal sensor temperature for ek-lm3s1968 board.
[bertos.git]
/
bertos
/
struct
/
bitarray.h
diff --git
a/bertos/struct/bitarray.h
b/bertos/struct/bitarray.h
index fdd9b86f91b82600a6475cd48aac584778883257..636049382e54af64924a1c0e3249560ea7093d58 100644
(file)
--- a/
bertos/struct/bitarray.h
+++ b/
bertos/struct/bitarray.h
@@
-47,13
+47,13
@@
typedef struct BitArray
{
typedef struct BitArray
{
- size_t size;
- size_t bitarray_len;
- uint8_t *array;
+ size_t size;
/// Size in bytes of the bitarray
+ size_t bitarray_len;
/// Number of bits used
+ uint8_t *array;
/// Pointer to memory occupied by the bitarray
} BitArray;
} BitArray;
-#define
ALLOC_BITARRAY
(name, size) uint8_t name[DIV_ROUNDUP((size), 8)]
-#define BIT
_
ARRAY_SIZE(name) (sizeof((name)) * 8)
+#define
BITARRAY_ALLOC
(name, size) uint8_t name[DIV_ROUNDUP((size), 8)]
+#define BITARRAY_SIZE(name) (sizeof((name)) * 8)
INLINE void bitarray_set(BitArray *bitx, int idx)
{
INLINE void bitarray_set(BitArray *bitx, int idx)
{
@@
-101,28
+101,23
@@
INLINE bool bitarray_test(BitArray *bitx, int idx)
return (bitx->array[page] & BV(bit));
}
return (bitx->array[page] & BV(bit));
}
-/*
- * Ugly!.. reformat it.
+/**
+ * Check if the bitarray is full
+ *
+ * Only \a bitarray_len bits are tested.
*/
INLINE bool bitarray_isFull(BitArray *bitx)
{
*/
INLINE bool bitarray_isFull(BitArray *bitx)
{
- int count = bitx->size;
- for (size_t page = 0; page <= bitx->size
/ 8
; page++)
+ // test full bytes except the last one
+ for (size_t page = 0; page <= bitx->size
- 2
; page++)
{
{
- if (count < 8)
- {
- for (size_t i = page * 8; i <= bitx->bitarray_len; i++)
- if (!bitarray_test(bitx, i))
- return 0;
- count--;
- }
- else
- {
- if (!(bitx->array[page] == 0xff))
- return 0;
- }
- count -= 8;
+ if (!(bitx->array[page] == 0xff))
+ return 0;
}
}
+ // test the last byte using the correct bitmask
+ uint8_t mask = BV(bitx->bitarray_len >> 3) - 1;
+ if (!(bitx->array[bitx->size - 1] & mask))
+ return 0;
return 1;
}
return 1;
}
@@
-180,7
+175,7
@@
INLINE void bitarray_dump(BitArray *bitx)
kprintf("..%02x [%d]\n", bitx->array[i / 8], i);
}
kprintf("..%02x [%d]\n", bitx->array[i / 8], i);
}
-INLINE void
init_bitarray
(BitArray *bitx, size_t bitarray_len, uint8_t *array, size_t size)
+INLINE void
bitarray_init
(BitArray *bitx, size_t bitarray_len, uint8_t *array, size_t size)
{
bitx->size = size;
bitx->array = array;
{
bitx->size = size;
bitx->array = array;