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); \
GWENHYWFAR_API void * GWEN_IdMap_Find(GWEN_IDMAP *map, uint32_t id)
struct GWEN_IDMAP GWEN_IDMAP
GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_GetNext(const GWEN_IDMAP *map, uint32_t *pid)
GWENHYWFAR_API void GWEN_IdMap_Dump(GWEN_IDMAP *map, FILE *f, int indent)
GWENHYWFAR_API void GWEN_IdMap_free(GWEN_IDMAP *map)
GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_Remove(GWEN_IDMAP *map, uint32_t id)
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 * GWEN_IdMap_new(GWEN_IDMAP_ALGO algo)
GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_GetFirst(const GWEN_IDMAP *map, uint32_t *pid)
GWENHYWFAR_API uint32_t GWEN_IdMap_GetSize(const GWEN_IDMAP *map)