module Data.Vector.Dense.Class.Views (
subvector,
subvectorWithStride,
unsafeSubvector,
unsafeSubvectorWithStride,
) where
import BLAS.Internal ( checkedSubvector, checkedSubvectorWithStride )
import Data.Vector.Dense.Class.Internal
import Foreign
subvector :: (BaseVector x, Storable e) =>
x n e -> Int -> Int -> x n' e
subvector x = checkedSubvector (dim x) (unsafeSubvector x)
unsafeSubvector :: (BaseVector x, Storable e) =>
x n e -> Int -> Int -> x n' e
unsafeSubvector = unsafeSubvectorWithStride 1
subvectorWithStride :: (BaseVector x, Storable e) =>
Int -> x n e -> Int -> Int -> x n' e
subvectorWithStride s x =
checkedSubvectorWithStride s (dim x) (unsafeSubvectorWithStride s x)
unsafeSubvectorWithStride :: (BaseVector x, Storable e) =>
Int -> x n e -> Int -> Int -> x n' e
unsafeSubvectorWithStride s' x o' n' =
let (f,p,_,s,c) = arrayFromVector x
in vectorViewArray f (p `advancePtr` (s*o')) n' (s*s') c