synthesizer-llvm-0.8.2: src/Synthesizer/LLVM/Storable/Vector.hs
{-# LANGUAGE TypeFamilies #-}
module Synthesizer.LLVM.Storable.Vector where
import qualified LLVM.Extra.Memory as Memory
import LLVM.Extra.Class (MakeValueTuple, ValueTuple, )
import qualified Data.StorableVector as SV
import qualified Data.StorableVector.Base as SVB
import Foreign.Storable (Storable, )
import Foreign.Marshal.Array (advancePtr, )
import Foreign.ForeignPtr (ForeignPtr, )
import Foreign.Ptr (Ptr, )
import qualified System.Unsafe as Unsafe
unsafeToPointers ::
(Storable a, MakeValueTuple a, ValueTuple a ~ value, Memory.C value) =>
SV.Vector a ->
(ForeignPtr a, Ptr (Memory.Struct value), Int)
unsafeToPointers v =
let (fp,s,l) = SVB.toForeignPtr v
in (fp,
Memory.castTuplePtr $ Unsafe.foreignPtrToPtr fp `advancePtr` s,
l)