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