module Database.Perdure.WordArrayRef (
WordArrayRef(..)
) where
import Prelude()
import Cgm.Prelude
import Cgm.Data.Word
import Database.Perdure.ArrayRef
import Database.Perdure.CDeserializer
instance (ArrayRef r32, ArrayRef r64, ArrayRefElem r32 ~ Word32, ArrayRefElem r64 ~ Word64) => ArrayRef (WordArrayRef r32 r64) where
type ArrayRefElem (WordArrayRef r32 r64) = Word
writeArrayRef l b = onWordConv
(Word32ArrayRef <$> writeArrayRef l (apply wordConv1 b))
(Word64ArrayRef <$> writeArrayRef l (apply wordConv1 b))
derefArrayRef f (Word32ArrayRef r) = fmap deserInput <$> derefPinnedArrayRef f r
derefArrayRef f (Word64ArrayRef r) = fmap deserInput <$> derefPinnedArrayRef f r
arrayRefAddr (Word32ArrayRef r) = arrayRefAddr r
arrayRefAddr (Word64ArrayRef r) = arrayRefAddr r
derefPinnedArrayRef :: (ArrayRef r, StoreFile f) => f -> r (StoreRef f) -> IO (Maybe (ArrayRange (PrimArray Pinned (ArrayRefElem r))))
derefPinnedArrayRef = derefArrayRef