1f08c3bdfSopenharmony_ci#ifndef PTRMAP_H 2f08c3bdfSopenharmony_ci#define PTRMAP_H 3f08c3bdfSopenharmony_ci 4f08c3bdfSopenharmony_cistruct ptrmap; 5f08c3bdfSopenharmony_ci 6f08c3bdfSopenharmony_ci#define DECLARE_PTRMAP(name, ktype, vtype) \ 7f08c3bdfSopenharmony_ci struct name ## _pair { ktype key; vtype val; }; \ 8f08c3bdfSopenharmony_ci struct name { struct name ## _pair block[1]; }; \ 9f08c3bdfSopenharmony_ci static inline \ 10f08c3bdfSopenharmony_ci void name##_add(struct name **map, ktype k, vtype v) { \ 11f08c3bdfSopenharmony_ci __ptrmap_add((struct ptrmap**)map, k, v); \ 12f08c3bdfSopenharmony_ci } \ 13f08c3bdfSopenharmony_ci static inline \ 14f08c3bdfSopenharmony_ci void name##_update(struct name **map, ktype k, vtype v) { \ 15f08c3bdfSopenharmony_ci __ptrmap_update((struct ptrmap**)map, k, v); \ 16f08c3bdfSopenharmony_ci } \ 17f08c3bdfSopenharmony_ci static inline \ 18f08c3bdfSopenharmony_ci vtype name##_lookup(struct name *map, ktype k) { \ 19f08c3bdfSopenharmony_ci vtype val = __ptrmap_lookup((struct ptrmap*)map, k); \ 20f08c3bdfSopenharmony_ci return val; \ 21f08c3bdfSopenharmony_ci } \ 22f08c3bdfSopenharmony_ci 23f08c3bdfSopenharmony_ci/* ptrmap.c */ 24f08c3bdfSopenharmony_civoid __ptrmap_add(struct ptrmap **mapp, void *key, void *val); 25f08c3bdfSopenharmony_civoid __ptrmap_update(struct ptrmap **mapp, void *key, void *val); 26f08c3bdfSopenharmony_civoid *__ptrmap_lookup(struct ptrmap *map, void *key); 27f08c3bdfSopenharmony_ci 28f08c3bdfSopenharmony_ci#endif 29