/* * @COPYRIGHT@ * * Scout Version 1.0 * * Copyright 1998 Arizona Board of Regents, on behalf of * The University of Arizona * All Rights Reserved * * @COPYRIGHT@ * * $RCSfile: map.h,v $ * */ #ifndef __map_h__ #define __map_h__ #include "types.h" typedef struct Map * Map; typedef struct MapEl * MapEl; typedef MapEl MapBinding; typedef struct MapWalk * MapWalk; struct MapEl { MapEl next; /* next element with same hash value */ AnyType value; /* VALUE that KEY maps to */ union { struct { long keySize; /* key size for this element */ char key[1]; /* in reality of size map->keySize */ } var; struct { char key[1]; /* in reality of size map->keySize */ } fixed; } u; }; typedef struct MapBucket * MapBucket; struct MapBucket { MapEl first; /* first map element in this bucket */ MapBucket next; /* next (non-empty) bucket */ }; struct MapWalk { MapWalk nextPendingWalk; Map map; MapBucket bucket; MapEl next; }; extern void mapInit (void); extern Map mapCreate (long nbuckets, long key_size); extern void mapDelete (Map m); extern size_t mapKeySize (Map m); extern MapBinding mapBind (Map m, const void * key, AnyType value); extern long mapUnbind (Map m, const void * key); extern long mapRemoveBinding (Map m, MapBinding b); extern long mapResolve (Map m, const void * key, long key_size, AnyType * value); extern void mapWalkInit (MapWalk w, Map m); extern MapEl mapWalkNext (MapWalk w); extern void mapWalkDone (MapWalk w); /* * Variable length keys (not very optimized). */ extern MapBinding mapVarBind (Map m, const void * key, long key_size, AnyType value); extern long mapVarResolve (Map m, const void * key, long key_size, AnyType * value); #endif /* __map_h__ */