struct apair { struct apair *next; /* next pair in hashed at this value */ struct svalue arg, val; /* index and value for this element */ short hashval; /* cashed hash value */ }; struct mapping { short size; /* current size (no of pairs entries) */ short ref; /* reverence count */ short card; /* number of elements in the mapping */ short mcard; /* extend when card exceeds this value */ struct apair **pairs; /* array of lists of elements */ }; void free_mapping (struct mapping *); struct mapping *allocate_map (int); int card_mapping (struct mapping *); struct svalue * get_map_lvalue (struct mapping *, struct svalue *, int); struct vector * map_domain (struct mapping *); struct vector * map_codomain (struct mapping *); struct mapping * make_mapping (struct vector *, struct vector *); struct mapping * add_mapping (struct mapping *, struct mapping *); void addto_mapping (struct mapping *, struct mapping *); struct mapping * remove_mapping (struct mapping *, struct svalue *); struct mapping * map_map(struct mapping *, char *, struct object *, struct svalue *); struct mapping * filter_map(struct mapping *, char *, struct object *, struct svalue *);