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;
}
-