1    type HashState @c = struct
2        value : MutPtr<u64>
3    
4    let fnv_offset "FNV_OFFSET" : u64
5    
6    object Kd =
7        def hash<T> @decl (x : T) (state : HashState)
8    
9        def hash_of<T> (x : T) =
10           let mut value = fnv_offset
11           let state = HashState value@mut_ptr
12           hash x state
13           value
14   
15   fun hash "kd_hash_ptr" (ptr : Ptr) state
16   fun hash<T> (ptr : Ptr<T>) state = Kd.hash ptr.as<Ptr> state
17   fun hash<T> (ptr : MutPtr<T>) state = Kd.hash ptr.as<Ptr> state
18   fun hash "kd_hash_u32" (x : u32) state
19   fun hash "kd_hash_i32" (x : i32) state
20   fun hash "kd_hash_char" (c : Char) state
21   
22   fun hash (x : bool) state =
23       let i : i32 = if x then 1 else 0
24       Kd.hash i state
25