| #ifndef PTRMAP_H |
| #define PTRMAP_H |
| |
| struct ptrmap; |
| |
| #define DECLARE_PTRMAP(name, ktype, vtype) \ |
| struct name ## _pair { ktype key; vtype val; }; \ |
| struct name { struct name ## _pair block[1]; }; \ |
| static inline \ |
| void name##_add(struct name **map, ktype k, vtype v) { \ |
| __ptrmap_add((struct ptrmap**)map, k, v); \ |
| } \ |
| static inline \ |
| void name##_update(struct name **map, ktype k, vtype v) { \ |
| __ptrmap_update((struct ptrmap**)map, k, v); \ |
| } \ |
| static inline \ |
| vtype name##_lookup(struct name *map, ktype k) { \ |
| vtype val = __ptrmap_lookup((struct ptrmap*)map, k); \ |
| return val; \ |
| } \ |
| |
| /* ptrmap.c */ |
| void __ptrmap_add(struct ptrmap **mapp, void *key, void *val); |
| void __ptrmap_update(struct ptrmap **mapp, void *key, void *val); |
| void *__ptrmap_lookup(struct ptrmap *map, void *key); |
| |
| #endif |