{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms #-}
module Data.Massiv.Array.Unsafe
(
unsafeMakeLoadArray
, unsafeMakeLoadArrayAdjusted
, Sz(SafeSz)
, Stride(SafeStride)
, unsafeIndex
, unsafeLinearIndex
, unsafeLinearIndexM
, unsafeBackpermute
, unsafeResize
, unsafeExtract
, unsafeTransform
, unsafeTransform2
, unsafeSlice
, unsafeOuterSlice
, unsafeInnerSlice
, unsafeLinearSlice
, unsafeThaw
, unsafeFreeze
, unsafeNew
, unsafeCreateArray
, unsafeCreateArray_
, unsafeCreateArrayS
, unsafeRead
, unsafeLinearRead
, unsafeWrite
, unsafeLinearWrite
, unsafeModify
, unsafeLinearModify
, unsafeSwap
, unsafeLinearSwap
, unsafeLinearSet
, unsafeLinearCopy
, unsafeArrayLinearCopy
, unsafeLinearShrink
, unsafeLinearGrow
, unsafeWithPtr
, unsafeArrayToForeignPtr
, unsafeMArrayToForeignPtr
, unsafeArrayFromForeignPtr
, unsafeArrayFromForeignPtr0
, unsafeMArrayFromForeignPtr
, unsafeMArrayFromForeignPtr0
, unsafeAtomicReadIntArray
, unsafeAtomicWriteIntArray
, unsafeAtomicModifyIntArray
, unsafeAtomicAddIntArray
, unsafeAtomicSubIntArray
, unsafeAtomicAndIntArray
, unsafeAtomicNandIntArray
, unsafeAtomicOrIntArray
, unsafeAtomicXorIntArray
, unsafeCasIntArray
, unsafeBoxedArray
, unsafeNormalBoxedArray
, unsafeFromBoxedVector
, unsafeUnstablePartitionRegionM
, module Data.Massiv.Vector.Unsafe
, module Data.Massiv.Array.Stencil.Unsafe
) where
import Data.Massiv.Array.Delayed.Pull (D)
import Data.Massiv.Array.Delayed.Push (unsafeMakeLoadArray, unsafeMakeLoadArrayAdjusted)
import Data.Massiv.Array.Manifest.Boxed
import Data.Massiv.Array.Manifest.Primitive
import Data.Massiv.Array.Manifest.Storable
import Data.Massiv.Array.Mutable.Internal
import Data.Massiv.Array.Ops.Sort (unsafeUnstablePartitionRegionM)
import Data.Massiv.Core.Common
import Data.Massiv.Core.Index.Internal (Sz(SafeSz))
import Data.Massiv.Core.Index.Stride (Stride(SafeStride))
import Data.Massiv.Vector.Unsafe
import Data.Massiv.Array.Stencil.Unsafe
unsafeBackpermute :: (Source r' ix' e, Index ix) =>
Sz ix -> (ix -> ix') -> Array r' ix' e -> Array D ix e
unsafeBackpermute !sz ixF !arr =
makeArray (getComp arr) sz $ \ !ix -> unsafeIndex arr (ixF ix)
{-# INLINE unsafeBackpermute #-}
unsafeTransform ::
(Source r' ix' e', Index ix)
=> (Sz ix' -> (Sz ix, a))
-> (a -> (ix' -> e') -> ix -> e)
-> Array r' ix' e'
-> Array D ix e
unsafeTransform getSz get arr = makeArray (getComp arr) sz (get a (unsafeIndex arr))
where
(sz, a) = getSz (size arr)
{-# INLINE unsafeTransform #-}
unsafeTransform2 ::
(Source r1 ix1 e1, Source r2 ix2 e2, Index ix)
=> (Sz ix1 -> Sz ix2 -> (Sz ix, a))
-> (a -> (ix1 -> e1) -> (ix2 -> e2) -> ix -> e)
-> Array r1 ix1 e1
-> Array r2 ix2 e2
-> Array D ix e
unsafeTransform2 getSz get arr1 arr2 =
makeArray (getComp arr1 <> getComp arr2) sz (get a (unsafeIndex arr1) (unsafeIndex arr2))
where
(sz, a) = getSz (size arr1) (size arr2)
{-# INLINE unsafeTransform2 #-}