ekg2  GIT master
dynstuff_inline.h
Idź do dokumentacji tego pliku.
1 #ifndef __EKG_DYNSTUFF_INLINE_H
2 #define __EKG_DYNSTUFF_INLINE_H
3 
4 /* we could use typeof() instead of passing paramtype, but let's be more portable */
5 
6 #include "dynstuff.h"
7 
8 #define __DYNSTUFF_LIST_ADD(lista, typ, __notused) \
9  void lista##_add(typ *new) { list_add3((list_t *) (void *) &lista, (list_t) new); }
10 
11 #define __DYNSTUFF_LIST_ADD_BEGINNING(lista, typ, __notused) \
12  void lista##_add(typ *new) { list_add_beginning3((list_t *) (void *) &lista, (list_t) new); }
13 
14 #define __DYNSTUFF_LIST_ADD_SORTED(lista, typ, comparision) \
15  void lista##_add(typ *new) { list_add_sorted3((list_t *) (void *) &lista, (list_t) new, (void *) comparision); }
16 
17 #define __DYNSTUFF_LIST_REMOVE_SAFE(lista, typ, free_func) \
18  void lista##_remove(typ *elem) { list_remove3((list_t *) (void *) &lista, (list_t) elem, (void *) free_func); }
19 
20 #define __DYNSTUFF_LIST_REMOVE_ITER(lista, typ, free_func) \
21  typ *lista##_removei(typ *elem) { return list_remove3i((list_t *) (void *) &lista, (list_t) elem, (void *) free_func); }
22 
23 #define __DYNSTUFF_LIST_DESTROY(lista, typ, free_func) \
24  void lista##_destroy(void) { list_destroy3((list_t) lista, (void *) free_func); lista = NULL; }
25 
26 /* !!! for other lists !!! [when we (have many || don't know) head of list during compilation time] */
27 
28 #define __DYNSTUFF_ADD(prefix, typ, __notused) \
29  void prefix##_add(typ **lista, typ *new) { list_add3((list_t *) lista, (list_t) new); }
30 
31 #define __DYNSTUFF_ADD_BEGINNING(prefix, typ, __notused) \
32  void prefix##_add(typ **lista, typ *new) { list_add_beginning3((list_t *) lista, (list_t) new); }
33 
34 #define __DYNSTUFF_ADD_SORTED(prefix, typ, comparision) \
35  void prefix##_add(typ **lista, typ *new) { list_add_sorted3((list_t *) lista, (list_t) new, (void *) comparision); }
36 
37 #define __DYNSTUFF_REMOVE_SAFE(prefix, typ, free_func) \
38  void prefix##_remove(typ **lista, typ *elem) { \
39  list_remove3((list_t *) lista, (list_t) elem, (void *) free_func); \
40  }
41 
42 #define __DYNSTUFF_DESTROY(prefix, typ, free_func) \
43  void prefix##_destroy(typ **lista) { \
44  list_destroy3((list_t) *lista, (void *) free_func); \
45  *lista = NULL; \
46  }
47 
48 #define __DYNSTUFF_NOREMOVE(lista, typ, free_func)
49 #define __DYNSTUFF_NOUNLINK(lista, typ)
50 #define __DYNSTUFF_NOCOUNT(lista, typ)
51 #define __DYNSTUFF_NODESTROY(lista, typ, free_func)
52 
53 #define DYNSTUFF_LIST_DECLARE_FULL(lista, type, compare_func, free_func, list_add, list_remove, list_remove2, list_unlink, list_destroy, list_count) \
54  list_add(lista, type, compare_func) \
55  list_remove(lista, type, free_func) \
56  list_remove2(lista, type, free_func) \
57  list_unlink(lista, type) \
58  list_destroy(lista, type, free_func) \
59  list_count(lista, type)
60 
61 #define DYNSTUFF_LIST_DECLARE(lista, type, free_func, list_add, list_remove, list_destroy) \
62  DYNSTUFF_LIST_DECLARE_WC(lista, type, free_func, list_add, list_remove, list_destroy, __DYNSTUFF_NOCOUNT)
63 
64 #define DYNSTUFF_LIST_DECLARE_NF(lista, type, list_add, list_unlink) \
65  DYNSTUFF_LIST_DECLARE_FULL(lista, type, NULL, NULL, list_add, __DYNSTUFF_NOREMOVE, __DYNSTUFF_NOREMOVE, list_unlink, __DYNSTUFF_NODESTROY, __DYNSTUFF_NOCOUNT)
66 
67 #define DYNSTUFF_LIST_DECLARE_WC(lista, type, free_func, list_add, list_remove, list_destroy, list_count) \
68  DYNSTUFF_LIST_DECLARE_FULL(lista, type, NULL, free_func, list_add, list_remove, __DYNSTUFF_NOREMOVE, __DYNSTUFF_NOUNLINK, list_destroy, list_count)
69 
70 #define DYNSTUFF_LIST_DECLARE_SORTED(lista, type, compare_func, free_func, list_add, list_remove, list_destroy) \
71  DYNSTUFF_LIST_DECLARE_FULL(lista, type, compare_func, free_func, list_add, list_remove, __DYNSTUFF_NOREMOVE, __DYNSTUFF_NOUNLINK, list_destroy, __DYNSTUFF_NOCOUNT)
72 
73 
74 #define DYNSTUFF_LIST_DECLARE2(lista, type, free_func, list_add, list_remove, list_remove2, list_destroy) \
75  DYNSTUFF_LIST_DECLARE_FULL(lista, type, NULL, free_func, list_add, list_remove, list_remove2, __DYNSTUFF_NOUNLINK, list_destroy, __DYNSTUFF_NOCOUNT)
76 
77 #define DYNSTUFF_LIST_DECLARE2_SORTED(lista, type, compare_func, free_func, list_add, list_remove, list_remove2, list_destroy) \
78  DYNSTUFF_LIST_DECLARE_FULL(lista, type, compare_func, free_func, list_add, list_remove, list_remove2, __DYNSTUFF_NOUNLINK, list_destroy, __DYNSTUFF_NOCOUNT)
79 
80 #define DYNSTUFF_LIST_DECLARE_SORTED_NF(lista, type, compare_func, list_add, list_unlink) \
81  DYNSTUFF_LIST_DECLARE_FULL(lista, type, compare_func, NULL, list_add, __DYNSTUFF_NOREMOVE, __DYNSTUFF_NOREMOVE, list_unlink, __DYNSTUFF_NODESTROY, __DYNSTUFF_NOCOUNT)
82 
83 
84 #endif