@@ -31,7 +31,8 @@ module Foreign.Matlab.Array (
31
31
-- | array list access
32
32
mxArrayGetList , mxArraySetList ,
33
33
mxArrayGetAll , mxArraySetAll ,
34
- mxArrayGetSafe , mxArrayGetFirst , mxArrayGetLast ,
34
+ mxArrayGetOffsetSafe , mxArrayGetFirst , mxArrayGetLast ,
35
+ -- mxArrayGetSafe, --TODO--
35
36
fromListIO , cellFromListsIO ,
36
37
isMNull ,
37
38
@@ -51,16 +52,17 @@ module Foreign.Matlab.Array (
51
52
mObjectGetClass , mObjectSetClass
52
53
) where
53
54
54
- import Control.Monad
55
- import Data.Foldable (toList )
56
- import Foreign
57
- import Foreign.C.String
58
- import Foreign.C.Types
59
- import Data.Complex
60
- import Data.Maybe (catMaybes )
61
- import Foreign.Matlab.Util
62
- import Foreign.Matlab.Internal
63
- import Foreign.Matlab.Types
55
+ import Control.Monad
56
+ import Data.Foldable (toList )
57
+ import Foreign
58
+ import Foreign.C.String
59
+ import Foreign.C.Types
60
+ import Data.Complex
61
+ import qualified Data.Map.Strict as DM
62
+ import Data.Maybe (catMaybes )
63
+ import Foreign.Matlab.Util
64
+ import Foreign.Matlab.Internal
65
+ import Foreign.Matlab.Types
64
66
65
67
#include <matrix.h>
66
68
@@ -231,16 +233,16 @@ mxArraySetAll :: MXArrayComponent a => MXArray a -> [a] -> IO ()
231
233
mxArraySetAll a = mxArraySetList a mStart
232
234
233
235
mxArrayGetFirst :: MXArrayComponent a => MXArray a -> MIO (Either String a )
234
- mxArrayGetFirst arr = mxArrayGetSafe arr 0
236
+ mxArrayGetFirst arr = mxArrayGetOffsetSafe arr 0
235
237
236
238
mxArrayGetLast :: MXArrayComponent a => MXArray a -> MIO (Either String a )
237
239
mxArrayGetLast arr = do
238
240
arrLen <- mxArrayLength arr
239
- mxArrayGetSafe arr (arrLen - 1 )
241
+ mxArrayGetOffsetSafe arr (arrLen - 1 )
240
242
241
243
-- | Like mxArrayGetOffset but safe.
242
- mxArrayGetSafe :: forall a . MXArrayComponent a => MXArray a -> Int -> MIO (Either String a )
243
- mxArrayGetSafe arr ix
244
+ mxArrayGetOffsetSafe :: forall a . MXArrayComponent a => MXArray a -> Int -> MIO (Either String a )
245
+ mxArrayGetOffsetSafe arr ix
244
246
| isMNull arr = pure $ Left " Couldn't get element of null array"
245
247
| otherwise = do
246
248
arrLen <- mxArrayLength arr
@@ -441,7 +443,8 @@ mStructRemoveField a f = withMXArray a $ \a -> do
441
443
442
444
structGetOffsetFields :: MStructArray -> [String] -> Int -> IO MStruct
443
445
structGetOffsetFields a f o =
444
- MStruct =.< withMXArray a (\a -> zipWithM (\f -> ((,) f) .=< (mxGetFieldByNumber a (ii o) >=> mkMXArray)) f [0..])
446
+ MStruct =.< withMXArray a (\a -> DM.fromList <$>
447
+ (zipWithM (\f -> ((,) f) .=< (mxGetFieldByNumber a (ii o) >=> mkMXArray)) f [0..]))
445
448
446
449
-- |Set the fields of a struct index to the given value list. The list corresponds to the field list and must match in size.
447
450
mStructSetFields :: MStructArray -> MIndex -> [MXArray a] -> MIO ()
@@ -464,7 +467,7 @@ instance MXArrayComponent MStruct where
464
467
withMXArray a $ \a -> zipWithM_ (\i v -> withMXArray v (mxSetFieldByNumber a 0 i)) [0..] v
465
468
pure a
466
469
where
467
- (f,v) = unzip fv
470
+ (f,v) = unzip $ DM.toList fv
468
471
469
472
foreign import ccall unsafe mxGetClassName :: MXArrayPtr -> IO CString
470
473
-- |Determine if a struct array is a user defined object, and return its class name, if any.
0 commit comments