25 #ifndef GWENHYWFAR_IDMAP_H
26 #define GWENHYWFAR_IDMAP_H
57 #ifndef GWEN_DUMMY_EMPTY_ARG
60 # define GWEN_DUMMY_EMPTY_ARG
64 #define GWEN_IDMAP_FUNCTION_LIB_DEFS(t, pr, decl) \
65 typedef GWEN_IDMAP t##_IDMAP; \
67 decl t##_IDMAP *pr##_IdMap_new(GWEN_IDMAP_ALGO algo); \
68 decl void pr##_IdMap_free(t##_IDMAP *l); \
69 decl void pr##_IdMap_freeAll(t##_IDMAP *l); \
70 decl void pr##_IdMap_FreeItems(t##_IDMAP *l); \
71 decl GWEN_IDMAP_RESULT pr##_IdMap_Insert(t##_IDMAP *l, \
74 decl GWEN_IDMAP_RESULT pr##_IdMap_Remove(t##_IDMAP *l, \
76 decl t* pr##_IdMap_Find(t##_IDMAP *l, uint32_t id); \
77 decl GWEN_IDMAP_RESULT pr##_IdMap_GetFirst(const t##_IDMAP *map, \
79 decl GWEN_IDMAP_RESULT pr##_IdMap_GetNext(const t##_IDMAP *map, \
81 decl uint32_t pr##_IdMap_GetSize(const GWEN_IDMAP *map); \
82 decl void pr##_IdMap_Clear(GWEN_IDMAP *l);
85 #define GWEN_IDMAP_FUNCTION_DEFS(t, pr) \
86 GWEN_IDMAP_FUNCTION_LIB_DEFS(t, pr, GWEN_DUMMY_EMPTY_ARG)
89 #define GWEN_IDMAP_FUNCTIONS(t, pr) \
90 t##_IDMAP *pr##_IdMap_new(GWEN_IDMAP_ALGO algo) { \
91 return (t##_IDMAP*)GWEN_IdMap_new(algo); \
94 void pr##_IdMap_free(t##_IDMAP *l) { \
95 GWEN_IdMap_free((GWEN_IDMAP*)l); \
98 void pr##_IdMap_freeAll(t##_IDMAP *l) { \
99 GWEN_IDMAP_RESULT res; \
102 res=pr##_IdMap_GetFirst(l, &id); \
103 while(res==GWEN_IdMapResult_Ok) { \
108 res=pr##_IdMap_GetNext(l, &nextId); \
109 ptr=pr##_IdMap_Find(l, id); \
114 pr##_IdMap_free(l); \
117 void pr##_IdMap_FreeItems(t##_IDMAP *l) { \
118 GWEN_IDMAP_RESULT res; \
121 res=pr##_IdMap_GetFirst(l, &id); \
122 while(res==GWEN_IdMapResult_Ok) { \
127 res=pr##_IdMap_GetNext(l, &nextId); \
128 ptr=pr##_IdMap_Find(l, id); \
131 pr##_IdMap_Remove(l, id); \
136 GWEN_IDMAP_RESULT pr##_IdMap_Insert(t##_IDMAP *l, \
139 return GWEN_IdMap_Insert((GWEN_IDMAP*)l, id, (void*) ptr); \
142 GWEN_IDMAP_RESULT pr##_IdMap_Remove(t##_IDMAP *l, \
144 return GWEN_IdMap_Remove((GWEN_IDMAP*)l, id); \
147 t* pr##_IdMap_Find(t##_IDMAP *l, uint32_t id) { \
148 return GWEN_IdMap_Find((GWEN_IDMAP*)l, id); \
151 GWEN_IDMAP_RESULT pr##_IdMap_GetFirst(const t##_IDMAP *l, \
153 return GWEN_IdMap_GetFirst((const GWEN_IDMAP*)l, pid); \
156 GWEN_IDMAP_RESULT pr##_IdMap_GetNext(const t##_IDMAP *l, \
158 return GWEN_IdMap_GetNext((const GWEN_IDMAP*)l, pid); \
161 uint32_t pr##_IdMap_GetSize(const GWEN_IDMAP *l) { \
162 return GWEN_IdMap_GetSize((const GWEN_IDMAP*)l); \
165 void pr##_IdMap_Clear(GWEN_IDMAP *l) { \
166 GWEN_IdMap_Clear((GWEN_IDMAP*)l); \
@ GWEN_IdMapResult_NotFound
GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_Insert(GWEN_IDMAP *map, uint32_t id, void *ptr)
GWENHYWFAR_API void GWEN_IdMap_Clear(GWEN_IDMAP *map)
GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_Remove(GWEN_IDMAP *map, uint32_t id)
GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_GetNext(const GWEN_IDMAP *map, uint32_t *pid)
struct GWEN_IDMAP GWEN_IDMAP
GWENHYWFAR_API uint32_t GWEN_IdMap_GetSize(const GWEN_IDMAP *map)
GWENHYWFAR_API void * GWEN_IdMap_Find(GWEN_IDMAP *map, uint32_t id)
GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_GetFirst(const GWEN_IDMAP *map, uint32_t *pid)
GWENHYWFAR_API void GWEN_IdMap_free(GWEN_IDMAP *map)
GWENHYWFAR_API void GWEN_IdMap_Dump(GWEN_IDMAP *map, FILE *f, int indent)
GWENHYWFAR_API GWEN_IDMAP * GWEN_IdMap_new(GWEN_IDMAP_ALGO algo)