Add hashvector_create + some polishing
authorRalph Ronnquist <ralph.ronnquist@gmail.com>
Tue, 5 Jul 2022 11:54:30 +0000 (21:54 +1000)
committerRalph Ronnquist <ralph.ronnquist@gmail.com>
Tue, 5 Jul 2022 11:54:30 +0000 (21:54 +1000)
vector/hashvector.c
vector/hashvector.h

index 0f5b31f6e640f9281bf982a9ca8fea422bd073d7..c26125376e9d811abc67e80e02f0f6cad572dcb5 100644 (file)
@@ -1,4 +1,5 @@
-#include "hashvector.h"
+#include <stdlib.h>
+#include <hashvector.h>
 
 #define SELF hv->type
 
@@ -174,3 +175,19 @@ unsigned long hashvector_hashcode(unsigned char *key,unsigned long n) {
     return value;
 }
 
+
+hashvector *hashvector_create(int variant,itemkeyfun *type) {
+    hashvector *hv = (hashvector*) malloc( sizeof( hashvector ) );
+    (*hv) = (hashvector) {
+       .table = (vector) {
+           .variant = variant,
+           .size = 0,
+           .entries = 0
+       },
+       .fill = 0,
+       .holes = 0,
+       .type = type
+    };
+    return hv;
+}
+
index d0f9e12f23114f0ec5aecac85c289e9641d49c85..1c3f387443bda77cd212479d3dc56a74c50532d5 100644 (file)
@@ -77,7 +77,7 @@ typedef struct {
  *
  * \related hashvector
  */
-int hashvector_find(hashvector *hv,void *key,void **x);
+extern int hashvector_find(hashvector *hv,void *key,void **x);
 
 /**
  * Add the given item into the hashvector, growing the hashvector as
@@ -89,7 +89,7 @@ int hashvector_find(hashvector *hv,void *key,void **x);
  *
  * \related hashvector
  */
-int hashvector_add(hashvector *hv,void *item);
+extern int hashvector_add(hashvector *hv,void *item);
 
 /**
  * Delete the given item, and shrink the hashvector so that its size
@@ -100,7 +100,7 @@ int hashvector_add(hashvector *hv,void *item);
  *
  * \related hashvector
  */
-int hashvector_delete(hashvector *hv,void *item);
+extern int hashvector_delete(hashvector *hv,void *item);
 
 /**
  * Copy content items into a vector, which must be empty. The
@@ -111,7 +111,7 @@ int hashvector_delete(hashvector *hv,void *item);
  *
  * \related hashvector
  */
-int hashvector_contents(hashvector *hv,vector *pv);
+extern int hashvector_contents(hashvector *hv,vector *pv);
 
 /**
  * This is a utility function to compute and return a hashcode for a
@@ -119,6 +119,11 @@ int hashvector_contents(hashvector *hv,vector *pv);
  *
  * \related hashvector
  */
-unsigned long hashvector_hashcode(unsigned char *key,unsigned long n);
+extern unsigned long hashvector_hashcode(unsigned char *key,unsigned long n);
+
+/**
+ * Create a hashvector for of given variant for given itemkeyfun*
+ */
+extern hashvector *hashvector_create(int variant,itemkeyfun *type);
 
 #endif