on master help sign in
Add put cases
commit98b1298d38e696b05c611aa8de7f49367d64fe73 authorNiklas Larsson <niklas@mm.st> dateSat 13 Feb 2016, 21:14 (11 years ago) parent30d2a54
2 files changed+25−1
libs/contrib/CFFI/Memory.idr+23−1 libs/contrib/CFFI/Types.idr+2
libs/contrib/CFFI/Memory.idr+23−1
@@ -25,6 +25,7 @@ free (CPt p _ _) = mfree p
2525ctype : CPtr -> CType
2626ctype (CPt _ _ t) = t
2727
28+
2829get : (p : CPtr) -> IO (translate (ctype p))
2930get (CPt p o I8) = prim_peek8 p o
3031get (CPt p o I16) = prim_peek16 p o
@@ -33,10 +34,31 @@ get (CPt p o I64) = prim_peek64 p o
3334get (CPt p o FLOAT) = prim_peekSingle p o
3435get (CPt p o DOUBLE) = prim_peekDouble p o
3536get (CPt p o PTR) = prim_peekPtr p o
37+get (CPt p o (ARRAY n t)) = ?getArray
38+get (CPt p o (UNION xs)) = ?getUnion
39+get (CPt p o (STRUCT xs)) = ?getStruct
40+get (CPt p o (PACKEDSTRUCT xs)) = ?getPacked
3641
3742
3843put : (p : CPtr) -> (translate (ctype p)) -> IO ()
39−put _ _ = putStrLn "putting"
44+put (CPt p o I8) x = do _ <- prim_poke8 p o x
45+ return ()
46+put (CPt p o I16) x = do _ <- prim_poke16 p o x
47+ return ()
48+put (CPt p o I32) x = do _ <- prim_poke32 p o x
49+ return ()
50+put (CPt p o I64) x = do _ <- prim_poke64 p o x
51+ return ()
52+put (CPt p o PTR) x = do _ <- prim_pokePtr p o x
53+ return ()
54+put (CPt p o FLOAT) x = do _ <- prim_pokeSingle p o x
55+ return ()
56+put (CPt p o DOUBLE) x = do _ <- prim_pokeDouble p o x
57+ return ()
58+put (CPt p o (ARRAY n t)) x = ?putArray
59+put (CPt p o (UNION xs)) x = ?putUnion
60+put (CPt p o (STRUCT xs)) x = ?putStruct
61+put (CPt p o (PACKEDSTRUCT xs)) x = ?putPacked
4062
4163-- update : (p : CPtr) -> ((translate(ctype p)) -> (translate (ctype p)) -> IO ()
4264-- TODO : Fix bounds checking
libs/contrib/CFFI/Types.idr+2
@@ -1,4 +1,5 @@
11||| Types for interfacing with C.
2+||| This file should be kept free from IO.
23module CFFI.Types
34
45import Data.Vect
@@ -103,6 +104,7 @@ offsets (ARRAY n t) = [ x*sizeOf t | x <- [0..n]]
103104offsets _ = [0]
104105
105106-- TODO: handle out of bounds with proofs
107+-- Also choose a better name.
106108select : CType -> Nat -> CType
107109select (STRUCT xs@(y::_)) i = fromMaybe y (index' i xs)
108110select (PACKEDSTRUCT xs@(y::_)) i = fromMaybe y (index' i xs)