0 | module Data.C.Deref
  1 |
  2 | %default total
  3 |
  4 | --------------------------------------------------------------------------------
  5 | -- FFI
  6 | --------------------------------------------------------------------------------
  7 |
  8 | %foreign "C:cptr_deref_bits8, cptr-idris"
  9 |          "scheme,chez:(lambda (x) (foreign-ref 'unsigned-8 x 0))"
 10 | prim__deref_bits8 : AnyPtr -> PrimIO Bits8
 11 |
 12 | %foreign "C:cptr_deref_bits16, cptr-idris"
 13 |          "scheme,chez:(lambda (x) (foreign-ref 'unsigned-16 x 0))"
 14 | prim__deref_bits16 : AnyPtr -> PrimIO Bits16
 15 |
 16 | %foreign "C:cptr_deref_bits32, cptr-idris"
 17 |          "scheme,chez:(lambda (x) (foreign-ref 'unsigned-32 x 0))"
 18 | prim__deref_bits32 : AnyPtr -> PrimIO Bits32
 19 |
 20 | %foreign "C:cptr_deref_bits64, cptr-idris"
 21 |          "scheme,chez:(lambda (x) (foreign-ref 'unsigned-64 x 0))"
 22 | prim__deref_bits64 : AnyPtr -> PrimIO Bits64
 23 |
 24 | %foreign "C:cptr_deref_int8, cptr-idris"
 25 |          "scheme,chez:(lambda (x) (foreign-ref 'integer-8 x 0))"
 26 | prim__deref_int8 : AnyPtr -> PrimIO Int8
 27 |
 28 | %foreign "C:cptr_deref_int16, cptr-idris"
 29 |          "scheme,chez:(lambda (x) (foreign-ref 'integer-16 x 0))"
 30 | prim__deref_int16 : AnyPtr -> PrimIO Int16
 31 |
 32 | %foreign "C:cptr_deref_int32, cptr-idris"
 33 |          "scheme,chez:(lambda (x) (foreign-ref 'integer-32 x 0))"
 34 | prim__deref_int32 : AnyPtr -> PrimIO Int32
 35 |
 36 | %foreign "C:cptr_deref_int64, cptr-idris"
 37 |          "scheme,chez:(lambda (x) (foreign-ref 'integer-64 x 0))"
 38 | prim__deref_int64 : AnyPtr -> PrimIO Int64
 39 |
 40 | %foreign "C:cptr_deref_str, cptr-idris"
 41 | prim__deref_str : AnyPtr -> PrimIO String
 42 |
 43 | %foreign "C:cptr_deref_anyptr, cptr-idris"
 44 | prim__deref_anyptr : AnyPtr -> PrimIO AnyPtr
 45 |
 46 | %foreign "C:cptr_set_bits8, cptr-idris"
 47 |          "scheme,chez:(lambda (x y) (foreign-set! 'unsigned-8 x 0 y))"
 48 | prim__set_bits8 : AnyPtr -> Bits8 -> PrimIO ()
 49 |
 50 | %foreign "C:cptr_set_bits16, cptr-idris"
 51 |          "scheme,chez:(lambda (x y) (foreign-set! 'unsigned-16 x 0 y))"
 52 | prim__set_bits16 : AnyPtr -> Bits16 -> PrimIO ()
 53 |
 54 | %foreign "C:cptr_set_bits32, cptr-idris"
 55 |          "scheme,chez:(lambda (x y) (foreign-set! 'unsigned-32 x 0 y))"
 56 | prim__set_bits32 : AnyPtr -> Bits32 -> PrimIO ()
 57 |
 58 | %foreign "C:cptr_set_bits64, cptr-idris"
 59 |          "scheme,chez:(lambda (x y) (foreign-set! 'unsigned-64 x 0 y))"
 60 | prim__set_bits64 : AnyPtr -> Bits64 -> PrimIO ()
 61 |
 62 | %foreign "C:cptr_set_int8, cptr-idris"
 63 |          "scheme,chez:(lambda (x y) (foreign-set! 'integer-8 x 0 y))"
 64 | prim__set_int8 : AnyPtr -> Int8 -> PrimIO ()
 65 |
 66 | %foreign "C:cptr_set_int16, cptr-idris"
 67 |          "scheme,chez:(lambda (x y) (foreign-set! 'integer-16 x 0 y))"
 68 | prim__set_int16 : AnyPtr -> Int16 -> PrimIO ()
 69 |
 70 | %foreign "C:cptr_set_int32, cptr-idris"
 71 |          "scheme,chez:(lambda (x y) (foreign-set! 'integer-32 x 0 y))"
 72 | prim__set_int32 : AnyPtr -> Int32 -> PrimIO ()
 73 |
 74 | %foreign "C:cptr_set_int64, cptr-idris"
 75 |          "scheme,chez:(lambda (x y) (foreign-set! 'integer-64 x 0 y))"
 76 | prim__set_int64 : AnyPtr -> Int64 -> PrimIO ()
 77 |
 78 | %foreign "C:cptr_set_str, cptr-idris"
 79 | prim__set_str : AnyPtr -> String -> PrimIO ()
 80 |
 81 | %foreign "C:cptr_set_anyptr, cptr-idris"
 82 | prim__set_anyptr : AnyPtr -> AnyPtr -> PrimIO ()
 83 |
 84 | %foreign "C:cptr_set_null, cptr-idris"
 85 | prim__set_null : AnyPtr -> PrimIO ()
 86 |
 87 | %foreign "C:cptr_is_null, cptr-idris"
 88 | prim__is_null : AnyPtr -> Bits8
 89 |
 90 | --------------------------------------------------------------------------------
 91 | -- Interfaces
 92 | --------------------------------------------------------------------------------
 93 |
 94 | public export
 95 | interface Deref a where
 96 |   deref : AnyPtr -> IO a
 97 |
 98 | export %inline
 99 | Deref Bits8 where deref p = fromPrim $ prim__deref_bits8 p
100 |
101 | export %inline
102 | Deref Bits16 where deref p = fromPrim $ prim__deref_bits16 p
103 |
104 | export %inline
105 | Deref Bits32 where deref p = fromPrim $ prim__deref_bits32 p
106 |
107 | export %inline
108 | Deref Bits64 where deref p = fromPrim $ prim__deref_bits64 p
109 |
110 | export %inline
111 | Deref Int8 where deref p = fromPrim $ prim__deref_int8 p
112 |
113 | export %inline
114 | Deref Int16 where deref p = fromPrim $ prim__deref_int16 p
115 |
116 | export %inline
117 | Deref Int32 where deref p = fromPrim $ prim__deref_int32 p
118 |
119 | export %inline
120 | Deref Int64 where deref p = fromPrim $ prim__deref_int64 p
121 |
122 | export %inline
123 | Deref String where deref p = fromPrim $ prim__deref_str p
124 |
125 | export %inline
126 | Deref (Maybe String) where
127 |   deref p =
128 |     case prim__is_null p of
129 |       0 => Just <$> deref p
130 |       _ => pure Nothing
131 |
132 | export %inline
133 | Deref AnyPtr where deref p = fromPrim $ prim__deref_anyptr p
134 |
135 | public export
136 | interface SetPtr a where
137 |   setPtr : AnyPtr -> a -> IO ()
138 |
139 | export %inline
140 | SetPtr Bits8 where setPtr p x = fromPrim $ prim__set_bits8 p x
141 |
142 | export %inline
143 | SetPtr Bits16 where setPtr p x = fromPrim $ prim__set_bits16 p x
144 |
145 | export %inline
146 | SetPtr Bits32 where setPtr p x = fromPrim $ prim__set_bits32 p x
147 |
148 | export %inline
149 | SetPtr Bits64 where setPtr p x = fromPrim $ prim__set_bits64 p x
150 |
151 | export %inline
152 | SetPtr Int8 where setPtr p x = fromPrim $ prim__set_int8 p x
153 |
154 | export %inline
155 | SetPtr Int16 where setPtr p x = fromPrim $ prim__set_int16 p x
156 |
157 | export %inline
158 | SetPtr Int32 where setPtr p x = fromPrim $ prim__set_int32 p x
159 |
160 | export %inline
161 | SetPtr Int64 where setPtr p x = fromPrim $ prim__set_int64 p x
162 |
163 | export %inline
164 | SetPtr String where setPtr p x = fromPrim $ prim__set_str p x
165 |
166 | export %inline
167 | SetPtr (Maybe String) where
168 |   setPtr p Nothing  = fromPrim $ prim__set_null p
169 |   setPtr p (Just s) = setPtr p s
170 |
171 | export %inline
172 | SetPtr AnyPtr where setPtr p x = fromPrim $ prim__set_anyptr p x
173 |