00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef FREELIST_H
00018 #define FREELIST_H
00019
00020 #include <list>
00021 #include <stdint.h>
00022
00023 namespace camvox {
00024
00025 typedef struct free_region_s free_region_t;
00026
00029 struct free_region_s {
00030 uint32_t start;
00031 uint32_t length;
00032 };
00033
00041 class FreeList {
00042 private:
00043 uint32_t nr_items;
00044 std::list<free_region_t *> regions;
00045
00048 void merge(std::list<free_region_t *>::iterator);
00049
00050 public:
00054 FreeList(uint32_t _nr_items);
00055
00058 ~FreeList();
00059
00063 uint32_t alloc();
00064
00068 void free(uint32_t item_nr);
00069
00075 uint32_t arraySize();
00076 };
00077
00078 }
00079
00080 #endif