Browse Source

ewah: add bitmap_dup() function

There's no easy way to make a copy of a bitmap. Obviously a caller can
iterate over the bits and set them one by one in a new bitmap, but we
can go much faster by copying whole words with memcpy().

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 4 years ago committed by Junio C Hamano
parent
commit
ccae08e822
  1. 7
      ewah/bitmap.c
  2. 1
      ewah/ewok.h

7
ewah/bitmap.c

@ -35,6 +35,13 @@ struct bitmap *bitmap_new(void) @@ -35,6 +35,13 @@ struct bitmap *bitmap_new(void)
return bitmap_word_alloc(32);
}

struct bitmap *bitmap_dup(const struct bitmap *src)
{
struct bitmap *dst = bitmap_word_alloc(src->word_alloc);
COPY_ARRAY(dst->words, src->words, src->word_alloc);
return dst;
}

static void bitmap_grow(struct bitmap *self, size_t word_alloc)
{
size_t old_size = self->word_alloc;

1
ewah/ewok.h

@ -173,6 +173,7 @@ struct bitmap { @@ -173,6 +173,7 @@ struct bitmap {

struct bitmap *bitmap_new(void);
struct bitmap *bitmap_word_alloc(size_t word_alloc);
struct bitmap *bitmap_dup(const struct bitmap *src);
void bitmap_set(struct bitmap *self, size_t pos);
void bitmap_unset(struct bitmap *self, size_t pos);
int bitmap_get(struct bitmap *self, size_t pos);

Loading…
Cancel
Save