Message ID | 20191019103531.23274-4-chriscool@tuxfamily.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Rewrite packfile reuse code | expand |
> From: Jeff King <peff@peff.net> > > In a following commit we will need to allocate a variable > number of bitmap words, instead of always 32, so let's add > bitmap_word_alloc() for this purpose. > > We will also always access at least one word for each bitmap, > so we want to make sure that at least one is always > allocated. The last paragraph is not true - we still can allocate 0. (We just ensure that when we grow, we grow to at least 1.) I think we should just delete the last paragraph - the first paragraph is sufficient. Other than that, all patches up to but not including the last one look good, except the ones that just add a new function because I'll have to review the last patch to see how they are used.
On Tue, Oct 22, 2019 at 7:46 PM Jonathan Tan <jonathantanmy@google.com> wrote: > > > From: Jeff King <peff@peff.net> > > > > In a following commit we will need to allocate a variable > > number of bitmap words, instead of always 32, so let's add > > bitmap_word_alloc() for this purpose. > > > > We will also always access at least one word for each bitmap, > > so we want to make sure that at least one is always > > allocated. > > The last paragraph is not true - we still can allocate 0. (We just ensure > that when we grow, we grow to at least 1.) I think we should just > delete the last paragraph - the first paragraph is sufficient. Ok, I removed the last paragraph in my current version. > Other than that, all patches up to but not including the last one look > good, except the ones that just add a new function because I'll have to > review the last patch to see how they are used. Thanks for your review, Christian.
diff --git a/ewah/bitmap.c b/ewah/bitmap.c index 52f1178db4..b5fed9621f 100644 --- a/ewah/bitmap.c +++ b/ewah/bitmap.c @@ -22,21 +22,26 @@ #define EWAH_MASK(x) ((eword_t)1 << (x % BITS_IN_EWORD)) #define EWAH_BLOCK(x) (x / BITS_IN_EWORD) -struct bitmap *bitmap_new(void) +struct bitmap *bitmap_word_alloc(size_t word_alloc) { struct bitmap *bitmap = xmalloc(sizeof(struct bitmap)); - bitmap->words = xcalloc(32, sizeof(eword_t)); - bitmap->word_alloc = 32; + bitmap->words = xcalloc(word_alloc, sizeof(eword_t)); + bitmap->word_alloc = word_alloc; return bitmap; } +struct bitmap *bitmap_new(void) +{ + return bitmap_word_alloc(32); +} + void bitmap_set(struct bitmap *self, size_t pos) { size_t block = EWAH_BLOCK(pos); if (block >= self->word_alloc) { size_t old_size = self->word_alloc; - self->word_alloc = block * 2; + self->word_alloc = block ? block * 2 : 1; REALLOC_ARRAY(self->words, self->word_alloc); memset(self->words + old_size, 0x0, (self->word_alloc - old_size) * sizeof(eword_t)); diff --git a/ewah/ewok.h b/ewah/ewok.h index 84b2a29faa..1b98b57c8b 100644 --- a/ewah/ewok.h +++ b/ewah/ewok.h @@ -172,6 +172,7 @@ struct bitmap { }; struct bitmap *bitmap_new(void); +struct bitmap *bitmap_word_alloc(size_t word_alloc); void bitmap_set(struct bitmap *self, size_t pos); int bitmap_get(struct bitmap *self, size_t pos); void bitmap_reset(struct bitmap *self);