root/usr/src/tools/smatch/src/ptrmap.h
#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