revise hashvector_contents to optionally create the target vector
[rrq/rrqmisc.git] / vector / stringitem.c
index ce10e7cb8c260876a620a4869a96cc35ecf39e54..d53576dd540f62ff6832af3b265de6271339af94 100644 (file)
@@ -11,7 +11,7 @@
  * vector placement is made at the first empty or hole slot following
  * the hashcode index.
  */
-static unsigned long stringitem_hashcode(itemkeyfun *this,void *key) {
+static unsigned long stringitem_hashcode(void *this,void *key) {
     return hashvector_hashcode( (unsigned char*)key, strlen( (char*)key ) );
 }
 
@@ -19,7 +19,7 @@ static unsigned long stringitem_hashcode(itemkeyfun *this,void *key) {
  * This callback function determines whether an item has a
  * given key or not.
  */
-static int stringitem_haskey(itemkeyfun *this,void *item,void *key) {
+static int stringitem_haskey(void *this,void *item,void *key) {
     return strcmp( item, key ) == 0;
 }
 
@@ -27,7 +27,7 @@ static int stringitem_haskey(itemkeyfun *this,void *item,void *key) {
  * This callback function returns the key of an item by considering
  * the arity and schema.
  */
-static void *stringitem_itemkey(itemkeyfun *this,void *item) {
+static void *stringitem_itemkey(void *this,void *item) {
     return item;
 }
 
@@ -35,12 +35,24 @@ static void *stringitem_itemkey(itemkeyfun *this,void *item) {
  * This callback function handles a key obtained from the itemkey
  * callback function to reclaim temporary allocation.
  */
-static void stringitem_releasekey(itemkeyfun *this,void *key) {
+static void stringitem_releasekey(void *this,void *key) {
+}
+
+/**
+ * This callback function writes a representation of an item into
+ * a character buffer.
+ */
+static int stringitem_tostring(void *this,void *item,char *buffer,int limit) {
+    if ( item ) {
+       return snprintf( buffer, limit, "\"%s\"", (char*) item );
+    }
+    return snprintf( buffer, limit, "(null)" );
 }
 
 itemkeyfun stringitem = {
     .hashcode = stringitem_hashcode,
     .haskey = stringitem_haskey,
     .itemkey = stringitem_itemkey,
-    .releasekey = stringitem_releasekey
+    .releasekey = stringitem_releasekey,
+    .tostring = stringitem_tostring
 };