summaryrefslogtreecommitdiff
path: root/src/basic/bitmap.c
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@googlemail.com>2015-07-16 15:12:26 +0200
committerDavid Herrmann <dh.herrmann@googlemail.com>2015-07-16 15:12:26 +0200
commit2ec7c4279e4cbbe668c5dfb0ab447b74deaa294b (patch)
tree27006a5c9063902b387f609920406abac3299976 /src/basic/bitmap.c
parent18458807574ec84f2bba4597ea5f8c925037d5f4 (diff)
parentcb57dd41595adddb08095298bb1ed258c8ea4877 (diff)
Merge pull request #602 from teg/bitmap-iterator
bitmap: use external iterator
Diffstat (limited to 'src/basic/bitmap.c')
-rw-r--r--src/basic/bitmap.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/basic/bitmap.c b/src/basic/bitmap.c
index d865e2fc6e..d559be1bbb 100644
--- a/src/basic/bitmap.c
+++ b/src/basic/bitmap.c
@@ -27,7 +27,6 @@ struct Bitmap {
long long unsigned *bitmaps;
size_t n_bitmaps;
size_t bitmaps_allocated;
- unsigned next_entry;
};
/* Bitmaps are only meant to store relatively small numbers
@@ -149,22 +148,15 @@ void bitmap_clear(Bitmap *b) {
b->bitmaps[i] = 0;
}
-void bitmap_rewind(Bitmap *b) {
- if (!b)
- return;
-
- b->next_entry = 0;
-}
-
-bool bitmap_next(Bitmap *b, unsigned *n) {
+bool bitmap_iterate(Bitmap *b, Iterator *i, unsigned *n) {
long long bitmask;
unsigned offset, rem;
- if (!b && b->next_entry == BITMAP_END)
+ if (!b && i->idx == BITMAP_END)
return false;
- offset = BITMAP_NUM_TO_OFFSET(b->next_entry);
- rem = BITMAP_NUM_TO_REM(b->next_entry);
+ offset = BITMAP_NUM_TO_OFFSET(i->idx);
+ rem = BITMAP_NUM_TO_REM(i->idx);
bitmask = 1 << rem;
for (; offset < b->n_bitmaps; offset ++) {
@@ -172,7 +164,7 @@ bool bitmap_next(Bitmap *b, unsigned *n) {
for (; bitmask; bitmask <<= 1, rem ++) {
if (b->bitmaps[offset] & bitmask) {
*n = BITMAP_OFFSET_TO_NUM(offset, rem);
- b->next_entry = *n + 1;
+ i->idx = *n + 1;
return true;
}
@@ -183,7 +175,7 @@ bool bitmap_next(Bitmap *b, unsigned *n) {
bitmask = 1;
}
- b->next_entry = BITMAP_END;
+ i->idx = BITMAP_END;
return false;
}