From 40f0c5a4559f0d837d4738ff483736f1fad2865f Mon Sep 17 00:00:00 2001 From: Polesznyák Márk Date: Wed, 8 Apr 2026 15:12:45 +0200 Subject: feat: Hare updates (rt -> sys), fix sorting and parsing --- hashmap.ha | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'hashmap.ha') diff --git a/hashmap.ha b/hashmap.ha index dd580b0..41235ea 100644 --- a/hashmap.ha +++ b/hashmap.ha @@ -1,15 +1,28 @@ -use hash::fnv; - def BUCKETS: size = 1 << 17; -type hashmap = [BUCKETS](str, data); +type hashmap = [BUCKETS][](size, data); fn getitem(map: *hashmap, hash: size) data = { let bucket = &map[hash & (BUCKETS - 1)]; - return bucket.1; + for (let i = 0z; i < len(bucket); i += 1) { + if (bucket[i].0 == hash) + return bucket[i].1; + }; + return data { ... }; }; -fn setitem(map: *hashmap, hash: size, key: str, value: data) void = { +fn setitem(map: *hashmap, hash: size, value: data) void = { let bucket = &map[hash & (BUCKETS - 1)]; - *bucket = (key, value); + for (let i = 0z; i < len(bucket); i += 1) { + if (bucket[i].0 == hash) { + bucket[i].1 = value; + return; + }; + }; + append(bucket, (hash, value))!; +}; + +fn finish(map: *hashmap) void = { + for (let i = 0z; i < len(map); i += 1) + free(map[i]); }; -- cgit v1.2.3