module Data.Vector.Dense.Class.Creating (
newVector_,
newVector,
newListVector,
unsafeNewVector,
) where
import Foreign
import BLAS.Elem
import BLAS.Tensor
import BLAS.UnsafeIOToM
import Data.Vector.Dense.Class.Internal
newVector :: (WriteVector x m, Elem e) => Int -> [(Int,e)] -> m (x n e)
newVector = newVectorHelp writeElem
unsafeNewVector :: (WriteVector x m, Elem e) => Int -> [(Int,e)] -> m (x n e)
unsafeNewVector = newVectorHelp unsafeWriteElem
newVectorHelp :: (WriteVector x m, Elem e) =>
(x n e -> Int -> e -> m ()) -> Int -> [(Int,e)] -> m (x n e)
newVectorHelp set n ies = do
x <- newZeroVector n
mapM_ (uncurry $ set x) ies
return x
newListVector :: (WriteVector x m, Elem e) => Int -> [e] -> m (x n e)
newListVector n es = do
x <- newVector_ n
unsafeIOToM $ withVectorPtr x $ flip pokeArray $ take n $ es ++ (repeat 0)
return x