on master help sign in
Change the working array position in the APIs of Foreign(.Type)
7cd7a18Adithya Kumar
benchmark/Streamly/Benchmark/Data/Array/Stream/Foreign.hs+1−1
@@ -85,7 +85,7 @@ toChunksLast inh = do
85 larr <- Stream.last s
85 larr <- Stream.last s
86 return $ case larr of
86 return $ case larr of
87 Nothing -> Nothing
87 Nothing -> Nothing
88− Just arr -> Array.getIndex arr (Array.length arr - 1)
88+ Just arr -> Array.getIndex (Array.length arr - 1) arr
89
89
90#ifdef INSPECTION
90#ifdef INSPECTION
91inspect $ hasNoTypeClasses 'toChunksLast
91inspect $ hasNoTypeClasses 'toChunksLast
src/Streamly/Internal/Data/Array/Foreign.hs+5−5
@@ -266,8 +266,8 @@ null arr = A.byteLength arr == 0
266--
266--
267-- /Pre-release/
267-- /Pre-release/
268{-# INLINE getIndexRev #-}
268{-# INLINE getIndexRev #-}
269−getIndexRev :: forall a. Storable a => Array a -> Int -> Maybe a
269+getIndexRev :: forall a. Storable a => Int -> Array a -> Maybe a
270−getIndexRev arr i =
270+getIndexRev i arr =
271 unsafeInlineIO
271 unsafeInlineIO
272 $ MA.unsafeWithArrayContents (arrContents arr) (arrStart arr)
272 $ MA.unsafeWithArrayContents (arrContents arr) (arrStart arr)
273 $ \ptr -> do
273 $ \ptr -> do
@@ -284,7 +284,7 @@ getIndexRev arr i =
284-- /Pre-release/
284-- /Pre-release/
285{-# INLINE last #-}
285{-# INLINE last #-}
286last :: Storable a => Array a -> Maybe a
286last :: Storable a => Array a -> Maybe a
287−last arr = getIndexRev arr 0
287+last = getIndexRev 0
288
288
289-------------------------------------------------------------------------------
289-------------------------------------------------------------------------------
290-- Folds with Array as the container
290-- Folds with Array as the container
@@ -431,8 +431,8 @@ getSlicesFromLen from len =
431--
431--
432-- @since 0.8.0
432-- @since 0.8.0
433{-# INLINE getIndex #-}
433{-# INLINE getIndex #-}
434−getIndex :: forall a. Storable a => Array a -> Int -> Maybe a
434+getIndex :: forall a. Storable a => Int -> Array a -> Maybe a
435−getIndex arr i =
435+getIndex i arr =
436 unsafeInlineIO
436 unsafeInlineIO
437 $ MA.unsafeWithArrayContents (arrContents arr) (arrStart arr)
437 $ MA.unsafeWithArrayContents (arrContents arr) (arrStart arr)
438 $ \ptr -> do
438 $ \ptr -> do
src/Streamly/Internal/Data/Array/Foreign/Type.hs+4−4
@@ -433,13 +433,13 @@ breakOn sep arr = do
433--
433--
434-- Unsafe because it does not check the bounds of the array.
434-- Unsafe because it does not check the bounds of the array.
435{-# INLINE_NORMAL unsafeIndexIO #-}
435{-# INLINE_NORMAL unsafeIndexIO #-}
436−unsafeIndexIO :: forall a. Storable a => Array a -> Int -> IO a
436+unsafeIndexIO :: forall a. Storable a => Int -> Array a -> IO a
437−unsafeIndexIO arr i = MA.getIndexUnsafe i (unsafeThaw arr)
437+unsafeIndexIO i arr = MA.getIndexUnsafe i (unsafeThaw arr)
438
438
439-- | Return element at the specified index without checking the bounds.
439-- | Return element at the specified index without checking the bounds.
440{-# INLINE_NORMAL unsafeIndex #-}
440{-# INLINE_NORMAL unsafeIndex #-}
441−unsafeIndex :: forall a. Storable a => Array a -> Int -> a
441+unsafeIndex :: forall a. Storable a => Int -> Array a -> a
442−unsafeIndex arr i = let !r = unsafeInlineIO $ unsafeIndexIO arr i in r
442+unsafeIndex i arr = let !r = unsafeInlineIO $ unsafeIndexIO i arr in r
443
443
444-- | /O(1)/ Get the byte length of the array.
444-- | /O(1)/ Get the byte length of the array.
445--
445--
src/Streamly/Internal/Data/Binary/Decode.hs+1−1
@@ -275,4 +275,4 @@ word64le = PRK.toParserK word64leD
275{-# INLINE word64host #-}
275{-# INLINE word64host #-}
276word64host :: (MonadIO m, MonadCatch m) => Parser m Word8 Word64
276word64host :: (MonadIO m, MonadCatch m) => Parser m Word8 Word64
277word64host =
277word64host =
278− fmap (flip A.unsafeIndex 0 . A.unsafeCast) $ PR.takeEQ 8 (A.writeN 8)
278+ fmap (A.unsafeIndex 0 . A.unsafeCast) $ PR.takeEQ 8 (A.writeN 8)
src/Streamly/Internal/Data/Stream/StreamD/Nesting.hs+2−2
@@ -1718,7 +1718,7 @@ splitOnSeq patArr (Fold fstep initial done) (Stream step state) =
1718 then return $ Skip $ SplitOnSeqEmpty acc state
1718 then return $ Skip $ SplitOnSeqEmpty acc state
1719 else if patLen == 1
1719 else if patLen == 1
1720 then do
1720 then do
1721− pat <- liftIO $ A.unsafeIndexIO patArr 0
1721+ pat <- liftIO $ A.unsafeIndexIO 0 patArr
1722 return $ Skip $ SplitOnSeqSingle acc state pat
1722 return $ Skip $ SplitOnSeqSingle acc state pat
1723 else if SIZE_OF(a) * patLen
1723 else if SIZE_OF(a) * patLen
1724 <= sizeOf (undefined :: Word)
1724 <= sizeOf (undefined :: Word)
@@ -2051,7 +2051,7 @@ splitOnSuffixSeq withSep patArr (Fold fstep initial done) (Stream step state) =
2051 then skip $ SplitOnSuffixSeqEmpty fs state
2051 then skip $ SplitOnSuffixSeqEmpty fs state
2052 else if patLen == 1
2052 else if patLen == 1
2053 then do
2053 then do
2054− pat <- liftIO $ A.unsafeIndexIO patArr 0
2054+ pat <- liftIO $ A.unsafeIndexIO 0 patArr
2055 skip $ SplitOnSuffixSeqSingleInit fs state pat
2055 skip $ SplitOnSuffixSeqSingleInit fs state pat
2056 else if SIZE_OF(a) * patLen
2056 else if SIZE_OF(a) * patLen
2057 <= sizeOf (undefined :: Word)
2057 <= sizeOf (undefined :: Word)
src/Streamly/Internal/FileSystem/Event/Darwin.hs+3−3
@@ -500,9 +500,9 @@ readOneEvent :: Parser IO Word8 Event
500readOneEvent = do
500readOneEvent = do
501 arr <- PR.takeEQ 24 (A.writeN 24)
501 arr <- PR.takeEQ 24 (A.writeN 24)
502 let arr1 = A.unsafeCast arr :: Array Word64
502 let arr1 = A.unsafeCast arr :: Array Word64
503− eid = A.unsafeIndex arr1 0
503+ eid = A.unsafeIndex 0 arr1
504− eflags = A.unsafeIndex arr1 1
504+ eflags = A.unsafeIndex 1 arr1
505− pathLen = fromIntegral $ A.unsafeIndex arr1 2
505+ pathLen = fromIntegral $ A.unsafeIndex 2 arr1
506 path <- PR.takeEQ pathLen (A.writeN pathLen)
506 path <- PR.takeEQ pathLen (A.writeN pathLen)
507 return $ Event
507 return $ Event
508 { eventId = eid
508 { eventId = eid
src/Streamly/Internal/FileSystem/Event/Linux.hs+2−2
@@ -658,7 +658,7 @@ ensureTrailingSlash :: Array Word8 -> Array Word8
658ensureTrailingSlash path =
658ensureTrailingSlash path =
659 if byteLength path /= 0
659 if byteLength path /= 0
660 then
660 then
661− let mx = A.getIndex path (byteLength path - 1)
661+ let mx = A.getIndex (byteLength path - 1) path
662 in case mx of
662 in case mx of
663 Nothing -> error "ensureTrailingSlash: Bug: Invalid index"
663 Nothing -> error "ensureTrailingSlash: Bug: Invalid index"
664 Just x ->
664 Just x ->
@@ -672,7 +672,7 @@ removeTrailingSlash path =
672 if byteLength path /= 0
672 if byteLength path /= 0
673 then
673 then
674 let n = byteLength path - 1
674 let n = byteLength path - 1
675− mx = A.getIndex path n
675+ mx = A.getIndex n path
676 in case mx of
676 in case mx of
677 Nothing -> error "removeTrailingSlash: Bug: Invalid index"
677 Nothing -> error "removeTrailingSlash: Bug: Invalid index"
678 Just x ->
678 Just x ->
test/Streamly/Test/Data/Parser.hs+3−3
@@ -678,9 +678,9 @@ readOneEvent :: P.Parser IO Word8 Event
678readOneEvent = do
678readOneEvent = do
679 arr <- P.takeEQ 24 (A.writeN 24)
679 arr <- P.takeEQ 24 (A.writeN 24)
680 let arr1 = A.unsafeCast arr :: A.Array Word64
680 let arr1 = A.unsafeCast arr :: A.Array Word64
681− eid = A.unsafeIndex arr1 0
681+ eid = A.unsafeIndex 0 arr1
682− eflags = A.unsafeIndex arr1 1
682+ eflags = A.unsafeIndex 1 arr1
683− pathLen = fromIntegral $ A.unsafeIndex arr1 2
683+ pathLen = fromIntegral $ A.unsafeIndex 2 arr1
684 -- XXX handle if pathLen is 0
684 -- XXX handle if pathLen is 0
685 path <- P.takeEQ pathLen (A.writeN pathLen)
685 path <- P.takeEQ pathLen (A.writeN pathLen)
686 return $ Event
686 return $ Event
test/Streamly/Test/Data/Parser/ParserD.hs+3−3
@@ -669,9 +669,9 @@ readOneEvent :: P.Parser IO Word8 Event
669readOneEvent = do
669readOneEvent = do
670 arr <- P.takeEQ 24 (A.writeN 24)
670 arr <- P.takeEQ 24 (A.writeN 24)
671 let arr1 = A.unsafeCast arr :: A.Array Word64
671 let arr1 = A.unsafeCast arr :: A.Array Word64
672− eid = A.unsafeIndex arr1 0
672+ eid = A.unsafeIndex 0 arr1
673− eflags = A.unsafeIndex arr1 1
673+ eflags = A.unsafeIndex 1 arr1
674− pathLen = fromIntegral $ A.unsafeIndex arr1 2
674+ pathLen = fromIntegral $ A.unsafeIndex 2 arr1
675 path <- P.takeEQ pathLen (A.writeN pathLen)
675 path <- P.takeEQ pathLen (A.writeN pathLen)
676 return $ Event
676 return $ Event
677 { eventId = eid
677 { eventId = eid