summaryrefslogtreecommitdiff
path: root/vere/pkg/noun/v1/hashtable.h
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-10-06 01:01:41 +0700
committerpolwex <polwex@sortug.com>2025-10-06 01:01:41 +0700
commitc4b392a179048f936c062f5ffccc2bc25627e500 (patch)
tree09be0904be8ec4d7ea52992ef7580d42ed0c28c1 /vere/pkg/noun/v1/hashtable.h
working
Diffstat (limited to 'vere/pkg/noun/v1/hashtable.h')
-rw-r--r--vere/pkg/noun/v1/hashtable.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/vere/pkg/noun/v1/hashtable.h b/vere/pkg/noun/v1/hashtable.h
new file mode 100644
index 0000000..74395cb
--- /dev/null
+++ b/vere/pkg/noun/v1/hashtable.h
@@ -0,0 +1,51 @@
+#ifndef U3_HASHTABLE_V1_H
+#define U3_HASHTABLE_V1_H
+
+#include "../hashtable.h"
+#include "v2/hashtable.h"
+
+ /** Aliases.
+ **/
+# define u3h_v1_buck u3h_v2_buck
+# define u3h_v1_node u3h_v2_node
+# define u3h_v1_root u3h_v2_root
+# define u3h_v1_slot_is_node u3h_v2_slot_is_node
+# define u3h_v1_slot_is_noun u3h_v2_slot_is_noun
+# define u3h_v1_slot_to_noun u3h_v2_slot_to_noun
+
+ /** Data structures.
+ **/
+
+ /** HAMT macros.
+ ***
+ *** Coordinate with u3_noun definition!
+ **/
+ /* u3h_v1_slot_to_node(): slot to node pointer
+ ** u3h_v1_node_to_slot(): node pointer to slot
+ */
+# define u3h_v1_slot_to_node(sot) (u3a_v1_into((sot) & 0x3fffffff))
+# define u3h_v1_node_to_slot(ptr) (u3a_v1_outa(ptr) | 0x40000000)
+
+ /** Functions.
+ ***
+ *** Needs: delete and merge functions; clock reclamation function.
+ **/
+ /* u3h_v1_free(): free hashtable.
+ */
+ void
+ u3h_v1_free_nodes(u3p(u3h_root) har_p);
+
+ /* u3h_v1_walk_with(): traverse hashtable with key, value fn and data
+ * argument; RETAINS.
+ */
+ void
+ u3h_v1_walk_with(u3p(u3h_root) har_p,
+ void (*fun_f)(u3_noun, void*),
+ void* wit);
+
+ /* u3h_v1_walk(): u3h_v1_walk_with, but with no data argument
+ */
+ void
+ u3h_v1_walk(u3p(u3h_root) har_p, void (*fun_f)(u3_noun));
+
+#endif /* ifndef U3_HASHTABLE_H */