module Data.StorableVector.CArray where
import qualified Data.StorableVector.Base as SV
import qualified Data.StorableVector as V
import qualified Data.Array.CArray.Base as CArray
import Foreign.Storable (Storable, )
import Data.Tuple.HT (swap, snd3, )
to :: (Storable e) =>
SV.Vector e -> CArray.CArray Int e
to v =
let checkZeroBase vf else_ =
let vo = SV.toForeignPtr vf
in if snd3 vo == 0
then vo
else else_
(ptr, _s, l) =
checkZeroBase v $
checkZeroBase (V.copy v) $
error "StorableVectorCArray.to: we expect that StorableVector.copy generates a 0-based vector"
in CArray.CArray 0 (l1) l ptr
from :: (Storable e) =>
CArray.CArray Int e -> SV.Vector e
from =
uncurry SV.fromForeignPtr . swap . CArray.toForeignPtr