pool.h
Go to the documentation of this file.00001
00079 #ifndef STRUCT_POOL_H
00080 #define STRUCT_POOL_H
00081
00082 #include <cfg/macros.h>
00083 #include <struct/list.h>
00084
00088 #define EXTERN_POOL(name) \
00089 extern List name
00090
00091 #define DECLARE_POOL_WITH_STORAGE(name, type, num, storage) \
00092 static type name##_items[num]; \
00093 storage name; \
00094 INLINE void name##_init(void (*init_func)(type*)) \
00095 { \
00096 size_t i; \
00097 LIST_INIT(&name); \
00098 for (i=0;i<countof(name##_items);++i) \
00099 { \
00100 if (init_func) init_func(&name##_items[i]); \
00101 ADDTAIL(&name, (Node*)&name##_items[i]); \
00102 } \
00103 } \
00104 INLINE void name##_init(void (*init_func)(type*)) \
00105
00106
00117 #define DECLARE_POOL(name, type, num) \
00118 DECLARE_POOL_WITH_STORAGE(name, type, num, List)
00119
00125 #define DECLARE_POOL_STATIC(name, type, num) \
00126 DECLARE_POOL_WITH_STORAGE(name, type, num, static List)
00127
00140 #define pool_init(name, init_func) (*(name##_init))(init_func)
00141
00154 #define pool_alloc(name) list_remHead(name)
00155
00165 #define pool_free(name, elem) ADDHEAD(name, (Node*)elem)
00166
00173 #define pool_empty(name) LIST_EMPTY(name)
00174
00176
00177 #endif