blob: 41235ea9bb4df959d1d499a6e71c8c826d0f1d4a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
def BUCKETS: size = 1 << 17;
type hashmap = [BUCKETS][](size, data);
fn getitem(map: *hashmap, hash: size) data = {
let bucket = &map[hash & (BUCKETS - 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, value: data) void = {
let bucket = &map[hash & (BUCKETS - 1)];
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]);
};
|