0 | module Data.Compress.Utils.ConstantTable
4 | import Data.IOArray.Prims
9 | data ConstantTable : Nat -> Type -> Type where
10 | MkFromArray : ArrayData e -> ConstantTable (S n) e
13 | length : {n : Nat} -> ConstantTable n e -> Nat
17 | index : Fin (S n) -> ConstantTable (S n) a -> a
18 | index n (MkFromArray array) = unsafePerformIO $
primIO $
prim__arrayGet array (cast $
finToInteger n)
21 | index_bits8 : Bits8 -> ConstantTable 256 a -> a
22 | index_bits8 n (MkFromArray array) = unsafePerformIO $
primIO $
prim__arrayGet array (cast n)
25 | from_vect : {n : Nat} -> Vect (S n) a -> ConstantTable (S n) a
26 | from_vect (x :: xs) = unsafePerformIO $
do
27 | array <- primIO $
prim__newArray (cast (S n)) x
28 | let indexed_array = zip (drop 1 Fin.range) xs
29 | traverse_ (\(i,v) => primIO $
prim__arraySet array (cast $
finToInteger i) v) indexed_array
30 | pure $
MkFromArray array