static void integeritem_releasekey(void *this,void *key) {
}
+/**
+ * This callback function writes a representation of an item into
+ * a character buffer.
+ */
+static int integeritem_tostring(void *this,void *item,char *buffer,int limit) {
+ return snprintf( buffer, limit, "%lld", (long long) item );
+}
+
itemkeyfun integeritem = {
.hashcode = integeritem_hashcode,
.haskey = integeritem_haskey,
.itemkey = integeritem_itemkey,
- .releasekey = integeritem_releasekey
+ .releasekey = integeritem_releasekey,
+ .tostring = integeritem_tostring
};
#ifndef itemkeyfun_H
#define itemkeyfun_H
+#include <stdio.h>
+
/**
* \struct itemkeyfun
*
*/
void (*releasekey)(SELF,void *key);
+ /**
+ * This callback function writes a representation of an item into
+ * a character buffer.
+ */
+ int (*tostring)(SELF,void *item,char *buffer,int limit);
+
#undef SELF
} itemkeyfun;
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
};
free( key );
}
+#define OUT(X) a = X; if ( a > limit ) return 0; buffer += a; limit -= a
+
+/**
+ * This callback function writes a representation of an item into
+ * a character buffer.
+ */
+static int tupleitem_tostring(void *this,void *item,char *buffer,int limit) {
+ tupleschema *def = (tupleschema *) this;
+ tuple *t = (tuple*) item;
+ char *x = "<";
+ int a, i;
+ for ( i = 0; i < def->arity; i++ ) {
+ OUT( snprintf( buffer, limit, x ) );
+ x = ",";
+ OUT( def->columns[i]->tostring(
+ def->columns[i], (*t)[i], buffer, limit ) );
+ }
+ OUT( snprintf( buffer, limit, ">" ) );
+ return a;
+}
+
+
// Allocate
tuple *tuple_create(int arity,...) {
va_list ap;
.hashcode = tupleitem_hashcode,
.haskey = tupleitem_haskey,
.itemkey = tupleitem_itemkey,
- .releasekey = tupleitem_releasekey
+ .releasekey = tupleitem_releasekey,
+ .tostring = tupleitem_tostring
};
tupleschema *tupleschema_create(int arity,tuple *columns) {
}
return mask;
}
-