2 #include <stringitem.h>
3 #include <hashvector.h>
6 * This callback function returns the hashcode of a key. The hashcode
7 * is used for indexing into the backing vector for finding the an
8 * item via its key. The same key must map consistently to the same
9 * hashcode while the hashtable contains an item with that key.
10 * Different keys map map to the same hashcode, in which case the
11 * vector placement is made at the first empty or hole slot following
14 static unsigned long stringitem_hashcode(void *this,void *key) {
15 return hashvector_hashcode( (unsigned char*)key, strlen( (char*)key ) );
19 * This callback function determines whether an item has a
22 static int stringitem_haskey(void *this,void *item,void *key) {
23 return strcmp( item, key ) == 0;
27 * This callback function returns the key of an item by considering
28 * the arity and schema.
30 static void *stringitem_itemkey(void *this,void *item) {
35 * This callback function handles a key obtained from the itemkey
36 * callback function to reclaim temporary allocation.
38 static void stringitem_releasekey(void *this,void *key) {
42 * This callback function writes a representation of an item into
45 static int stringitem_tostring(void *this,void *item,char *buffer,int limit) {
47 return snprintf( buffer, limit, "\"%s\"", (char*) item );
49 return snprintf( buffer, limit, "(null)" );
52 itemkeyfun stringitem = {
53 .hashcode = stringitem_hashcode,
54 .haskey = stringitem_haskey,
55 .itemkey = stringitem_itemkey,
56 .releasekey = stringitem_releasekey,
57 .tostring = stringitem_tostring