on master help sign in
Add show instance for CType and CPtr

Add an implicit conversion from CPtr to Ptr

commit87785d8604c240c87cc3c2efe15b60c792a85564 authorNiklas Larsson <niklas@mm.st> dateSat 13 Feb 2016, 22:25 (11 years ago) parent98b1298
2 files changed+31−12
libs/contrib/CFFI/Memory.idr+14−8 libs/contrib/CFFI/Types.idr+17−4
libs/contrib/CFFI/Memory.idr+14−8
@@ -10,6 +10,12 @@ import CFFI.Types
1010
1111data CPtr = CPt Ptr Int CType
1212
13+implicit decayCPtr : CPtr -> Ptr
14+decayCPtr (CPt p _ _) = p
15+
16+Show CPtr where
17+ show (CPt _ os t) = "CPtr ptr " ++ show os ++ " " ++ show t
18+
1319malloc : Int -> IO Ptr
1420malloc size = foreign FFI_C "malloc" (Int -> IO Ptr) size
1521
@@ -34,10 +40,10 @@ get (CPt p o I64) = prim_peek64 p o
3440get (CPt p o FLOAT) = prim_peekSingle p o
3541get (CPt p o DOUBLE) = prim_peekDouble p o
3642get (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
43+-- get (CPt p o (ARRAY n t)) = ?getArray
44+-- get (CPt p o (UNION xs)) = ?getUnion
45+-- get (CPt p o (STRUCT xs)) = ?getStruct
46+-- get (CPt p o (PACKEDSTRUCT xs)) = ?getPacked
4147
4248
4349put : (p : CPtr) -> (translate (ctype p)) -> IO ()
@@ -55,10 +61,10 @@ put (CPt p o FLOAT) x = do _ <- prim_pokeSingle p o x
5561 return ()
5662put (CPt p o DOUBLE) x = do _ <- prim_pokeDouble p o x
5763 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
64+-- put (CPt p o (ARRAY n t)) x = ?putArray
65+-- put (CPt p o (UNION xs)) x = ?putUnion
66+-- put (CPt p o (STRUCT xs)) x = ?putStruct
67+-- put (CPt p o (PACKEDSTRUCT xs)) x = ?putPacked
6268
6369-- update : (p : CPtr) -> ((translate(ctype p)) -> (translate (ctype p)) -> IO ()
6470-- TODO : Fix bounds checking
libs/contrib/CFFI/Types.idr+17−4
@@ -3,7 +3,7 @@
33module CFFI.Types
44
55import Data.Vect
6−import Data.HList
6+import Data.HVect
77
88%access public export
99%default partial
@@ -13,6 +13,19 @@ data CType = I8 | I16 | I32 | I64 | FLOAT | DOUBLE | PTR
1313 | ARRAY Int CType | STRUCT (List CType) | UNION (List CType)
1414 | PACKEDSTRUCT (List CType)
1515
16+Show CType where
17+ show I8 = "I8"
18+ show I16 = "I16"
19+ show I32 = "I32"
20+ show I64 = "I64"
21+ show FLOAT = "FLOAT"
22+ show DOUBLE = "DOUBLE"
23+ show PTR = "PTR"
24+ show (ARRAY n t) = "ARRAY " ++ show n ++ " " ++ show t
25+ show (STRUCT xs) = "STRUCT " ++ show xs
26+ show (UNION xs) = "UNION " ++ show xs
27+ show (PACKEDSTRUCT xs) = "PACKEDSTRUCT " ++ show xs
28+
1629translate : CType -> Type
1730translate I8 = Bits8
1831translate I16 = Bits16
@@ -22,9 +35,9 @@ translate FLOAT = Double
2235translate DOUBLE = Double
2336translate PTR = Ptr
2437translate (ARRAY n t) = Vect (toNat n) (translate t)
25−translate (STRUCT xs) = HList (map translate xs)
26−translate (UNION xs) = HList (map translate xs)
27−translate (PACKEDSTRUCT xs) = HList (map translate xs)
38+translate (STRUCT xs) = HVect $ fromList (map translate xs)
39+translate (UNION xs) = HVect $ fromList (map translate xs)
40+translate (PACKEDSTRUCT xs) = HVect $ fromList (map translate xs)
2841
2942mutual
3043 sizeOf : CType -> Int