blob: 041009ac6c600d8726db34bd0de6b818d4136849 (
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
29
|
def HASHMAP_SIZE: size = 1 << 15;
type hashmap = [HASHMAP_SIZE](size, stat);
fn getitem(map: *hashmap, hash: size) stat = {
let i = hash & (HASHMAP_SIZE - 1);
for (true) {
if (map[i].0 == 0 && map[i].1.count == 0)
break;
if (map[i].0 == hash)
return map[i].1;
i = (i + 1) & (HASHMAP_SIZE - 1);
};
return stat { ... };
};
fn setitem(map: *hashmap, hash: size, value: stat) void = {
let i = hash & (HASHMAP_SIZE - 1);
for (true) {
if (map[i].0 == 0 && map[i].1.count == 0)
break;
if (map[i].0 == hash) {
map[i].1 = value;
return;
};
i = (i + 1) & (HASHMAP_SIZE - 1);
};
map[i] = (hash, value);
};
|