00001 #pragma once
00002 #ifndef BITMAP_H
00003 #define BITMAP_H
00004
00005 #include <stdint.h>
00006
00007 typedef uint32_t bitmap_cell_t;
00008 typedef uint16_t bitmap_size_t;
00009 typedef int32_t bitmap_bitn_t;
00010
00011 typedef struct {
00012 #if defined(SEAP_THREAD_SAFE)
00013 uint8_t locked;
00014 #endif
00015 bitmap_size_t size;
00016 bitmap_size_t realsize;
00017 bitmap_cell_t *cells;
00018 bitmap_bitn_t count;
00019 } bitmap_t;
00020
00021 #if defined(SEAP_THREAD_SAFE)
00022 # define BITMAP_INITIALIZER { 0, 128, 0, NULL, 0 }
00023 #else
00024 # define BITMAP_INITIALIZER { 128, 0, NULL, 0 }
00025 #endif
00026
00027 #define BITMAP_CELLSIZE (sizeof (bitmap_cell_t) * 8)
00028
00029 bitmap_t *bitmap_new (bitmap_size_t size);
00030 int *bitmap_init (bitmap_t *bitmap, bitmap_size_t size);
00031 int *bitmap_reinit (bitmap_t *bitmap, bitmap_size_t size);
00032 int bitmap_set (bitmap_t *bitmap, bitmap_bitn_t bitn);
00033 int bitmap_cas (bitmap_t *bitmap, bitmap_bitn_t bitn, int v);
00034 int bitmap_unset (bitmap_t *bitmap, bitmap_bitn_t bitn);
00035 int bitmap_clear (bitmap_t *bitmap);
00036 bitmap_bitn_t bitmap_setfree (bitmap_t *bitmap);
00037 bitmap_bitn_t bitmap_getfree (bitmap_t *bitmap);
00038 void bitmap_free (bitmap_t *bitmap);
00039
00040 #endif