BeRTOS
|
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 /* defgroup pool */ 00176 00177 #endif /* STRUCT_POOL_H */