Make user responsible for allocating `struct bitmap's.
authorBen Pfaff <blp@cs.stanford.edu>
Mon, 30 Aug 2004 04:49:44 +0000 (04:49 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Mon, 30 Aug 2004 04:49:44 +0000 (04:49 +0000)
src/lib/bitmap.c
src/lib/bitmap.h

index 84a6ae4cc82c65af4169598c462f8bf34f3f5b03..616056f3dba32fbf67a5e4c6f6ae6db15287665d 100644 (file)
@@ -10,12 +10,6 @@ typedef unsigned long elem_type;
 #define ELEM_IDX(BIT_IDX) ((BIT_IDX) / ELEM_BITS)
 #define BIT_MASK(BIT_IDX) ((elem_type) 1 << ((BIT_IDX) % ELEM_BITS))
 
-struct bitmap
-  {
-    size_t bit_cnt;
-    elem_type *bits;
-  };
-
 static inline size_t
 elem_cnt (const struct bitmap *b) 
 {
@@ -28,31 +22,30 @@ byte_cnt (const struct bitmap *b)
   return sizeof (elem_type) * elem_cnt (b);
 }
 
-struct bitmap *
-bitmap_create (size_t bit_cnt) 
+void
+bitmap_init (struct bitmap *b, size_t bit_cnt) 
 {
-  struct bitmap *b = malloc (sizeof *b);
-  if (b == NULL)
-    return NULL;
-
   b->bit_cnt = bit_cnt;
   b->bits = malloc (byte_cnt (b));
   if (b->bits == NULL && bit_cnt > 0) 
-    {
-      free (b);
-      return NULL;
-    }
+    return NULL;
+
   bitmap_set_all (b, false);
   return b;
 }
 
+size_t
+bitmap_storage_size (const struct bitmap *b) 
+{
+  return byte_cnt (b);
+}
+
 void
 bitmap_destroy (struct bitmap *b) 
 {
   ASSERT (b);
   
   free (b->bits);
-  free (b);
 }
 
 size_t
index 50d8db646caa11eb0018a0ac98b2bdc586b894f9..ba4465e4e595cf040574f8388be5bade0f837d85 100644 (file)
@@ -4,7 +4,13 @@
 #include <stdbool.h>
 #include <stddef.h>
 
-struct bitmap *bitmap_create (size_t bit_cnt);
+struct bitmap
+  {
+    size_t bit_cnt;
+    elem_type *bits;
+  };
+
+void bitmap_init (struct bitmap *, size_t bit_cnt);
 void bitmap_destroy (struct bitmap *);
 
 size_t bitmap_size (const struct bitmap *);