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 3bbaa8d19cf277b96037f0da96ee4eb4fb76c33a..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)
{
@@
-75,7
+75,7
@@
INLINE void bitarray_clear(BitArray *bitx, int idx)
bitx->array[page] &= ~BV(bit);
}
bitx->array[page] &= ~BV(bit);
}
-INLINE void bitarray_set
Offset
(BitArray *bitx, int idx, int offset)
+INLINE void bitarray_set
Range
(BitArray *bitx, int idx, int offset)
{
ASSERT((size_t)idx <= bitx->bitarray_len);
{
ASSERT((size_t)idx <= bitx->bitarray_len);
@@
-84,7
+84,7
@@
INLINE void bitarray_setOffset(BitArray *bitx, int idx, int offset)
}
}
-INLINE void bitarray_clear
Offset
(BitArray *bitx, int idx, int offset)
+INLINE void bitarray_clear
Range
(BitArray *bitx, int idx, int offset)
{
ASSERT((size_t)idx <= bitx->bitarray_len);
{
ASSERT((size_t)idx <= bitx->bitarray_len);
@@
-92,7
+92,7
@@
INLINE void bitarray_clearOffset(BitArray *bitx, int idx, int offset)
bitarray_clear(bitx, i);
}
bitarray_clear(bitx, i);
}
-INLINE bool bitarray_
check
(BitArray *bitx, int idx)
+INLINE bool bitarray_
test
(BitArray *bitx, int idx)
{
ASSERT((size_t)idx <= bitx->bitarray_len);
int page = idx / 8;
{
ASSERT((size_t)idx <= bitx->bitarray_len);
int page = idx / 8;
@@
-101,28
+101,23
@@
INLINE bool bitarray_check(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_
f
ull(BitArray *bitx)
+INLINE bool bitarray_
isF
ull(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_check(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;
}
@@
-130,12
+125,12
@@
INLINE bool bitarray_full(BitArray *bitx)
/*
* Ugly!.. reformat it.
*/
/*
* Ugly!.. reformat it.
*/
-INLINE bool bitarray_
block
Full(BitArray *bitx, int idx, int offset)
+INLINE bool bitarray_
isRange
Full(BitArray *bitx, int idx, int offset)
{
ASSERT((size_t)(idx + offset) <= bitx->bitarray_len);
for (int i = idx; i <= idx + offset; i++)
{
ASSERT((size_t)(idx + offset) <= bitx->bitarray_len);
for (int i = idx; i <= idx + offset; i++)
- if (!bitarray_
check
(bitx, i))
+ if (!bitarray_
test
(bitx, i))
return 0;
return 1;
return 0;
return 1;
@@
-144,12
+139,12
@@
INLINE bool bitarray_blockFull(BitArray *bitx, int idx, int offset)
/*
* Ugly!.. reformat it.
*/
/*
* Ugly!.. reformat it.
*/
-INLINE bool bitarray_
block
Empty(BitArray *bitx, int idx, int offset)
+INLINE bool bitarray_
isRange
Empty(BitArray *bitx, int idx, int offset)
{
ASSERT((size_t)(idx + offset) <= bitx->bitarray_len);
for (int i = idx; i <= idx + offset; i++)
{
ASSERT((size_t)(idx + offset) <= bitx->bitarray_len);
for (int i = idx; i <= idx + offset; i++)
- if (bitarray_
check
(bitx, i))
+ if (bitarray_
test
(bitx, i))
return 0;
return 1;
return 0;
return 1;
@@
-166,7
+161,7
@@
INLINE void bitarray_dump(BitArray *bitx)
while (count--)
{
while (count--)
{
- kprintf("%d", bitarray_
check
(bitx, i++));
+ kprintf("%d", bitarray_
test
(bitx, i++));
if (j == 7)
{
kprintf("..%02x [%d]\n", bitx->array[(i / 8) - 1], i);
if (j == 7)
{
kprintf("..%02x [%d]\n", bitx->array[(i / 8) - 1], i);
@@
-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;