--- /dev/null
+#include <stdlib.h>
+#include <string.h>
+#include "hashvector.h"
+
+typedef struct _ipslot {
+ int family;
+ unsigned char data[32];
+ unsigned int bits;
+} ipslot;
+
+static unsigned long voidp_hashcode(void *key) {
+ return hashvector_hashcode( key, sizeof( ipslot ) );
+}
+
+static void* voidp_itemkey(void *item) {
+ return item;
+}
+
+static int voidp_haskey(void *item,void *key) {
+ return memcmp( item, key, sizeof( ipslot ) ) == 0;
+}
+
+static int shrink(vector *pv,unsigned long index,void *item,void *data) {
+ if ( item ) {
+ if ( item == HV_HOLE ) {
+ ((hashvector*) data)->holes--;
+ } else {
+ free( item );
+ ((hashvector*) data)->fill--;
+ }
+ }
+ return 0;
+}
+
+int main(int argc,char **argv) {
+ hashvector hv = {
+ .table = { 4, 0 },
+ .fill = 0,
+ .holes = 0,
+ .keyhashcode = voidp_hashcode,
+ .itemkey = voidp_itemkey,
+ .haskey = voidp_haskey
+ };
+ int i = 0;
+ for ( ; i < 259; i++ ) {
+ ipslot *item = (ipslot*) calloc( 1, sizeof( ipslot ) );
+ if ( i > 250 ) {
+ int n = i;
+ i = n;
+ }
+ item->family = i;
+ memcpy( item->data, "10.10.10.1", 10 );
+ hashvector_add( &hv, item );
+ }
+ for ( i = 256; i < 260; i++ ) {
+ vector_index index = i;
+ void ** slot = vector_next_used( &hv.table, &index, 0, 0 );
+ if ( slot && *slot != HV_HOLE ) {
+ hashvector_delete( &hv, *slot );
+ }
+ }
+ vector_resize( &hv.table, 256, shrink, &hv );
+ return 0;
+}