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 DEFINE_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 
00107 /* For backwards compatibily */
00108 #define DECLARE_POOL_WITH_STORAGE DEFINE_POOL_WITH_STORAGE
00109 
00120 #define DEFINE_POOL(name, type, num) \
00121     DEFINE_POOL_WITH_STORAGE(name, type, num, List)
00122 
00123 /* For backwards compatibily */
00124 #define DECLARE_POOL DEFINE_POOL
00125 
00131 #define DEFINE_POOL_STATIC(name, type, num) \
00132     DEFINE_POOL_WITH_STORAGE(name, type, num, static List)
00133 
00134 /* For backwards compatibily */
00135 #define DECLARE_POOL_STATIC  DEFINE_POOL_STATIC
00136 
00149 #define pool_init(name, init_func)     (*(name##_init))(init_func)
00150 
00163 #define pool_alloc(name)               list_remHead(name)
00164 
00174 #define pool_free(name, elem)          ADDHEAD(name, (Node*)elem)
00175 
00182 #define pool_empty(name)               LIST_EMPTY(name)
00183  /* defgroup pool */
00185
00186 #endif /* STRUCT_POOL_H */