#ifndef _UTHASH_UDI_PRIVATE_ #define _UTHASH_UDI_PRIVATE_ #include "uthash.h" union AI { YAP_Atom atom; YAP_Int integer; }; struct UTHash { union AI key; void *data; UT_hash_handle hh; }; typedef struct UTHash *uthash_t; /* Used to Iterate over equal keys in hash table */ #define HASH_FIND_NEXT(hh,last,keyptr,keylen_in) \ do { \ if (last->hh.hh_next) \ DECLTYPE_ASSIGN(last,ELMT_FROM_HH(last->hh.tbl,last->hh.hh_next)); \ else last = NULL; \ while (last) { \ if (last->hh.keylen == keylen_in) { \ if ((HASH_KEYCMP(last->hh.key,keyptr,keylen_in)) == 0) { \ break; \ } \ } \ if (last->hh.hh_next) \ DECLTYPE_ASSIGN(last,ELMT_FROM_HH(last->hh.tbl,last->hh.hh_next)); \ else last = NULL; \ } \ } while (0) \ /* to ease code for a Atom hash table*/ #define HASH_FIND_AI(head,find,out) \ HASH_FIND(hh,head,find,sizeof(union AI),out) #define HASH_ADD_AI(head,add) \ HASH_ADD(hh,head,key,sizeof(union AI),add) #define HASH_FIND_NEXT_AI(last,find) \ HASH_FIND_NEXT(hh,last,find,sizeof(union AI)) #endif /* _UTHASH_UDI_PRIVATE_ */