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