Change the working array position in the APIs of Foreign(.Type)

This commit is contained in:
Adithya Kumar 2022-02-04 23:21:19 +05:30
parent 64c476f34b
commit 7cd7a185d3
9 changed files with 24 additions and 24 deletions

View File

@ -85,7 +85,7 @@ toChunksLast inh = do
larr <- Stream.last s
return $ case larr of
Nothing -> Nothing
Just arr -> Array.getIndex arr (Array.length arr - 1)
Just arr -> Array.getIndex (Array.length arr - 1) arr
#ifdef INSPECTION
inspect $ hasNoTypeClasses 'toChunksLast

View File

@ -266,8 +266,8 @@ null arr = A.byteLength arr == 0
--
-- /Pre-release/
{-# INLINE getIndexRev #-}
getIndexRev :: forall a. Storable a => Array a -> Int -> Maybe a
getIndexRev arr i =
getIndexRev :: forall a. Storable a => Int -> Array a -> Maybe a
getIndexRev i arr =
unsafeInlineIO
$ MA.unsafeWithArrayContents (arrContents arr) (arrStart arr)
$ \ptr -> do
@ -284,7 +284,7 @@ getIndexRev arr i =
-- /Pre-release/
{-# INLINE last #-}
last :: Storable a => Array a -> Maybe a
last arr = getIndexRev arr 0
last = getIndexRev 0
-------------------------------------------------------------------------------
-- Folds with Array as the container
@ -431,8 +431,8 @@ getSlicesFromLen from len =
--
-- @since 0.8.0
{-# INLINE getIndex #-}
getIndex :: forall a. Storable a => Array a -> Int -> Maybe a
getIndex arr i =
getIndex :: forall a. Storable a => Int -> Array a -> Maybe a
getIndex i arr =
unsafeInlineIO
$ MA.unsafeWithArrayContents (arrContents arr) (arrStart arr)
$ \ptr -> do

View File

@ -433,13 +433,13 @@ breakOn sep arr = do
--
-- Unsafe because it does not check the bounds of the array.
{-# INLINE_NORMAL unsafeIndexIO #-}
unsafeIndexIO :: forall a. Storable a => Array a -> Int -> IO a
unsafeIndexIO arr i = MA.getIndexUnsafe i (unsafeThaw arr)
unsafeIndexIO :: forall a. Storable a => Int -> Array a -> IO a
unsafeIndexIO i arr = MA.getIndexUnsafe i (unsafeThaw arr)
-- | Return element at the specified index without checking the bounds.
{-# INLINE_NORMAL unsafeIndex #-}
unsafeIndex :: forall a. Storable a => Array a -> Int -> a
unsafeIndex arr i = let !r = unsafeInlineIO $ unsafeIndexIO arr i in r
unsafeIndex :: forall a. Storable a => Int -> Array a -> a
unsafeIndex i arr = let !r = unsafeInlineIO $ unsafeIndexIO i arr in r
-- | /O(1)/ Get the byte length of the array.
--

View File

@ -275,4 +275,4 @@ word64le = PRK.toParserK word64leD
{-# INLINE word64host #-}
word64host :: (MonadIO m, MonadCatch m) => Parser m Word8 Word64
word64host =
fmap (flip A.unsafeIndex 0 . A.unsafeCast) $ PR.takeEQ 8 (A.writeN 8)
fmap (A.unsafeIndex 0 . A.unsafeCast) $ PR.takeEQ 8 (A.writeN 8)

View File

@ -1718,7 +1718,7 @@ splitOnSeq patArr (Fold fstep initial done) (Stream step state) =
then return $ Skip $ SplitOnSeqEmpty acc state
else if patLen == 1
then do
pat <- liftIO $ A.unsafeIndexIO patArr 0
pat <- liftIO $ A.unsafeIndexIO 0 patArr
return $ Skip $ SplitOnSeqSingle acc state pat
else if SIZE_OF(a) * patLen
<= sizeOf (undefined :: Word)
@ -2051,7 +2051,7 @@ splitOnSuffixSeq withSep patArr (Fold fstep initial done) (Stream step state) =
then skip $ SplitOnSuffixSeqEmpty fs state
else if patLen == 1
then do
pat <- liftIO $ A.unsafeIndexIO patArr 0
pat <- liftIO $ A.unsafeIndexIO 0 patArr
skip $ SplitOnSuffixSeqSingleInit fs state pat
else if SIZE_OF(a) * patLen
<= sizeOf (undefined :: Word)

View File

@ -500,9 +500,9 @@ readOneEvent :: Parser IO Word8 Event
readOneEvent = do
arr <- PR.takeEQ 24 (A.writeN 24)
let arr1 = A.unsafeCast arr :: Array Word64
eid = A.unsafeIndex arr1 0
eflags = A.unsafeIndex arr1 1
pathLen = fromIntegral $ A.unsafeIndex arr1 2
eid = A.unsafeIndex 0 arr1
eflags = A.unsafeIndex 1 arr1
pathLen = fromIntegral $ A.unsafeIndex 2 arr1
path <- PR.takeEQ pathLen (A.writeN pathLen)
return $ Event
{ eventId = eid

View File

@ -658,7 +658,7 @@ ensureTrailingSlash :: Array Word8 -> Array Word8
ensureTrailingSlash path =
if byteLength path /= 0
then
let mx = A.getIndex path (byteLength path - 1)
let mx = A.getIndex (byteLength path - 1) path
in case mx of
Nothing -> error "ensureTrailingSlash: Bug: Invalid index"
Just x ->
@ -672,7 +672,7 @@ removeTrailingSlash path =
if byteLength path /= 0
then
let n = byteLength path - 1
mx = A.getIndex path n
mx = A.getIndex n path
in case mx of
Nothing -> error "removeTrailingSlash: Bug: Invalid index"
Just x ->

View File

@ -678,9 +678,9 @@ readOneEvent :: P.Parser IO Word8 Event
readOneEvent = do
arr <- P.takeEQ 24 (A.writeN 24)
let arr1 = A.unsafeCast arr :: A.Array Word64
eid = A.unsafeIndex arr1 0
eflags = A.unsafeIndex arr1 1
pathLen = fromIntegral $ A.unsafeIndex arr1 2
eid = A.unsafeIndex 0 arr1
eflags = A.unsafeIndex 1 arr1
pathLen = fromIntegral $ A.unsafeIndex 2 arr1
-- XXX handle if pathLen is 0
path <- P.takeEQ pathLen (A.writeN pathLen)
return $ Event

View File

@ -669,9 +669,9 @@ readOneEvent :: P.Parser IO Word8 Event
readOneEvent = do
arr <- P.takeEQ 24 (A.writeN 24)
let arr1 = A.unsafeCast arr :: A.Array Word64
eid = A.unsafeIndex arr1 0
eflags = A.unsafeIndex arr1 1
pathLen = fromIntegral $ A.unsafeIndex arr1 2
eid = A.unsafeIndex 0 arr1
eflags = A.unsafeIndex 1 arr1
pathLen = fromIntegral $ A.unsafeIndex 2 arr1
path <- P.takeEQ pathLen (A.writeN pathLen)
return $ Event
{ eventId = eid