@@ -8,26 +8,18 @@ import Prelude.Bool
8%default total
8%default total
12−toHexDigit : Fin 16 -> Char
13−toHexDigit n = index n hexVect where
14− hexVect : Vect 16 Char
15− hexVect = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
16− 'A', 'B', 'C', 'D', 'E', 'F']
18b8ToString : Bits8 -> String
11b8ToString : Bits8 -> String
19−b8ToString c = pack (with List [c1, c2]) where
12+b8ToString c = pack (with List [c1, c2])
20− %assert_total -- We will only supply numbers that can fit in 4 bits
13+ where getDigit : Bits8 -> Char
21− toFin16 : Bits8 -> Fin 16
14+ getDigit b = let n = prim__zextB8_Int b in
22− toFin16 n = if n == 0
15+ if n >= 0 && n <= 9
23− then fZ
16+ then '0' `prim__addChar` cast n
24− else believe_me (fS (toFin16 (n-1)))
17+ else if n >= 10 && n <= 15
25− c1 = toHexDigit upper where
18+ then 'A' `prim__addChar` cast (n - 10)
26− upper : Fin 16
19+ else '?' -- this is for totality - it should not happen
27− upper = toFin16 (prim__lshrB8 c 4)
20+ c1 = getDigit (prim__andB8 (prim__lshrB8 c 4) 15)
28− c2 = toHexDigit lower where
30− lower = toFin16 (prim__andB8 c 0xf)
21+ c2 = getDigit (prim__andB8 c 15)
32b16ToString : Bits16 -> String
24b16ToString : Bits16 -> String
33b16ToString c = c1 ++ c2 where
25b16ToString c = c1 ++ c2 where
@@ -42,7 +34,7 @@ b32ToString : Bits32 -> String
42b32ToString c = c1 ++ c2 where
34b32ToString c = c1 ++ c2 where
43 c1 = b16ToString upper where
35 c1 = b16ToString upper where
44 upper : Bits16
36 upper : Bits16
45− upper = prim__truncB32_B16 (prim__lshrB32 c 16)
37+ upper = prim__truncB32_B16 (prim__andB32 (prim__lshrB32 c 16) 0x0000ffff)
46 c2 = b16ToString lower where
38 c2 = b16ToString lower where
47 lower : Bits16
39 lower : Bits16
48 lower = prim__truncB32_B16 c
40 lower = prim__truncB32_B16 c
@@ -51,7 +43,7 @@ b64ToString : Bits64 -> String
51b64ToString c = c1 ++ c2 where
43b64ToString c = c1 ++ c2 where
52 c1 = b32ToString upper where
44 c1 = b32ToString upper where
53 upper : Bits32
45 upper : Bits32
54− upper = prim__truncB64_B32 (prim__lshrB64 c 32)
46+ upper = prim__truncB64_B32 (prim__andB64 (prim__lshrB64 c 32) 0x00000000ffffffff)
55 c2 = b32ToString lower where
47 c2 = b32ToString lower where
56 lower : Bits32
48 lower : Bits32
57 lower = prim__truncB64_B32 c
49 lower = prim__truncB64_B32 c