mirror of
https://github.com/composewell/streamly.git
synced 2024-10-26 19:50:19 +03:00
Change the working array position in the APIs of Foreign(.Type)
This commit is contained in:
parent
64c476f34b
commit
7cd7a185d3
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
--
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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 ->
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user