module Foreign.Matlab.Array.MArray (
MMXArray, mxMArray, unMmxArray
) where
import qualified Data.Ix as Ix
import qualified Data.Array.Base as DA
import qualified Unsafe.Coerce
import Foreign.Matlab.Util
import Foreign.Matlab.Types
import Foreign.Matlab.Array
newtype MMXArray i e = MMXArray { mmxArray :: MXArray e }
mxMArray :: MXArrayComponent a => MXArray a -> MMXArray MIndex a
mxMArray = MMXArray
unMmxArray :: MXArrayComponent a => MMXArray MIndex a -> MXArray a
unMmxArray = mmxArray
mix :: Ix.Ix a => MIndex -> a
mix x = Unsafe.Coerce.unsafeCoerce x
mir :: Ix.Ix a => (MIndex,MIndex) -> (a,a)
mir (x,y) = (mix x,mix y)
instance MXArrayComponent e => DA.MArray MMXArray e IO where
getBounds = mir . mSizeRange .=< mxArraySize . mmxArray
getNumElements = mxArrayLength . mmxArray
newArray_ _ = fail "MMXArray.newArray_: use MXArrayI . createMXArray"
unsafeRead = mxArrayGetOffset . mmxArray
unsafeWrite = mxArraySetOffset . mmxArray