aboutsummaryrefslogtreecommitdiff
path: root/example_hashmap/new/map.h
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2025-09-01 22:00:02 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2025-09-01 22:00:02 +0300
commite68480f2fc508ce73cad331ce4e8439e07d25702 (patch)
treebfa99b6f20402ba46230771a0d42172fc2169481 /example_hashmap/new/map.h
parent20ce6fa81cd9f55dca3212699d5949f8ebe7d95b (diff)
downloadngc-master.tar.gz
ngc-master.zip
use <> as expansion charactersHEADmaster
+ I kind of like the 'symmetry' of <> being 'self' and <param> being some parameter, but having to type lots of extra <*> is a bit annoying, and might also be an issue for C++. Still, enough functionality for a hashmap example
Diffstat (limited to 'example_hashmap/new/map.h')
-rw-r--r--example_hashmap/new/map.h22
1 files changed, 11 insertions, 11 deletions
diff --git a/example_hashmap/new/map.h b/example_hashmap/new/map.h
index e993139..e892011 100644
--- a/example_hashmap/new/map.h
+++ b/example_hashmap/new/map.h
@@ -17,8 +17,8 @@
* supported so just go with this for now */
typedef map[any K, any D]() {
struct <>_tuple {
- K key;
- D data;
+ <K> key;
+ <D> data;
};
typedef struct <>_tuple *<>_iter;
@@ -64,9 +64,9 @@ typedef map[any K, any D]() {
free(root->buckets);
}
- D *<>_insert(<>* root, K key, D data)
+ <D> *<>_insert(<>* root, <K> key, <D> data)
{
- size_t hash = <key>_hash(&key);
+ size_t hash = <K>_hash(&key);
/* look through buckets in order */
for (size_t b = 0; b < root->count; ++b) {
struct <>_bucket *bucket = root->buckets[b];
@@ -84,7 +84,7 @@ typedef map[any K, any D]() {
}
/* there already exists a node like this */
- if (node->hash == hash && <key>_cmp(&node->t.key, &key) == 0)
+ if (node->hash == hash && <K>_cmp(&node->t.key, &key) == 0)
return &node->t.data;
}
@@ -122,12 +122,12 @@ typedef map[any K, any D]() {
return &node->t.data;
}
- D *<>_find(<> *root, K key)
+ <D> *<>_find(<> *root, <K> key)
{
if (root->len == 0)
return NULL;
- size_t hash = <key>_hash(&key);
+ size_t hash = <K>_hash(&key);
for (size_t b = 0; b < root->count; ++b) {
struct <>_bucket *bucket = root->buckets[b];
size_t idx = NGC_BUCKET_IDX(hash, root->pow2, b);
@@ -136,7 +136,7 @@ typedef map[any K, any D]() {
if (node->hash != hash)
continue;
- if (<key>_cmp(&node->t.key, key) != 0)
+ if (<K>_cmp(&node->t.key, &key) != 0)
continue;
return &node->t.data;
@@ -145,7 +145,7 @@ typedef map[any K, any D]() {
return NULL;
}
- void <>_remove_found(<> *root, D *data)
+ void <>_remove_found(<> *root, <D> *data)
{
struct <>_tuple *tuple = NGC_CONTAINER_OF(data, struct <>_tuple, data);
struct <>_node *node = NGC_CONTAINER_OF(tuple, struct <>_node, t);
@@ -153,9 +153,9 @@ typedef map[any K, any D]() {
root->len--;
}
- void <>_remove(<> *root, K key)
+ void <>_remove(<> *root, <K> key)
{
- D *found = <>_find(root, key);
+ <D> *found = <>_find(root, key);
if (!found)
return;