@@ -386,8 +386,8 @@ indexError sbs i =
386386------------------------------------------------------------------------
387387-- Internal utils
388388
389- asBA :: ShortByteString -> BA
390- asBA (unSBS -> ba # ) = BA # ba #
389+ asBA :: ShortByteString -> ByteArray
390+ asBA (ShortByteString ba ) = ba
391391
392392unSBS :: ShortByteString -> ByteArray #
393393unSBS (ShortByteString (ByteArray ba# )) = ba#
@@ -397,8 +397,7 @@ create len fill =
397397 assert (len >= 0 ) $ runST $ do
398398 mba <- newByteArray len
399399 fill mba
400- BA # ba# <- unsafeFreezeByteArray mba
401- return (SBS ba# )
400+ ShortByteString <$> unsafeFreezeByteArray mba
402401{-# INLINE create #-}
403402
404403-- | Given the maximum size needed and a function to make the contents
@@ -413,13 +412,13 @@ createAndTrim maxLen fill =
413412 (len, res) <- fill mba
414413 if assert (0 <= len && len <= maxLen) $ len >= maxLen
415414 then do
416- BA # ba # <- unsafeFreezeByteArray mba
417- return (SBS ba# , res)
415+ ba <- unsafeFreezeByteArray mba
416+ return (ShortByteString ba, res)
418417 else do
419418 mba2 <- newByteArray len
420419 copyMutableByteArray mba 0 mba2 0 len
421- BA # ba # <- unsafeFreezeByteArray mba2
422- return (SBS ba# , res)
420+ ba <- unsafeFreezeByteArray mba2
421+ return (ShortByteString ba, res)
423422{-# INLINE createAndTrim #-}
424423
425424createAndTrim' :: Int -> (forall s . MBA s -> ST s Int ) -> ShortByteString
@@ -429,13 +428,11 @@ createAndTrim' maxLen fill =
429428 len <- fill mba
430429 if assert (0 <= len && len <= maxLen) $ len >= maxLen
431430 then do
432- BA # ba# <- unsafeFreezeByteArray mba
433- return (SBS ba# )
431+ ShortByteString <$> unsafeFreezeByteArray mba
434432 else do
435433 mba2 <- newByteArray len
436434 copyMutableByteArray mba 0 mba2 0 len
437- BA # ba# <- unsafeFreezeByteArray mba2
438- return (SBS ba# )
435+ ShortByteString <$> unsafeFreezeByteArray mba2
439436{-# INLINE createAndTrim' #-}
440437
441438-- | Like createAndTrim, but with two buffers at once
@@ -453,13 +450,11 @@ createAndTrim2 maxLen1 maxLen2 fill =
453450 freeze' len maxLen mba =
454451 if assert (0 <= len && len <= maxLen) $ len >= maxLen
455452 then do
456- BA # ba# <- unsafeFreezeByteArray mba
457- return (SBS ba# )
453+ ShortByteString <$> unsafeFreezeByteArray mba
458454 else do
459455 mba2 <- newByteArray len
460456 copyMutableByteArray mba 0 mba2 0 len
461- BA # ba# <- unsafeFreezeByteArray mba2
462- return (SBS ba# )
457+ ShortByteString <$> unsafeFreezeByteArray mba2
463458{-# INLINE createAndTrim2 #-}
464459
465460isPinned :: ByteArray # -> Bool
@@ -485,8 +480,7 @@ toShortIO (BS fptr len) = do
485480 let ptr = unsafeForeignPtrToPtr fptr
486481 stToIO (copyAddrToByteArray ptr mba 0 len)
487482 touchForeignPtr fptr
488- BA # ba# <- stToIO (unsafeFreezeByteArray mba)
489- return (SBS ba# )
483+ ShortByteString <$> stToIO (unsafeFreezeByteArray mba)
490484
491485-- | /O(n)/. Convert a 'ShortByteString' into a 'ByteString'.
492486--
@@ -783,7 +777,7 @@ map f = \sbs ->
783777 ba = asBA sbs
784778 in create l (\ mba -> go ba mba 0 l)
785779 where
786- go :: BA -> MBA s -> Int -> Int -> ST s ()
780+ go :: ByteArray -> MBA s -> Int -> Int -> ST s ()
787781 go ! ba ! mba ! i ! l
788782 | i >= l = return ()
789783 | otherwise = do
@@ -802,7 +796,7 @@ reverse = \sbs ->
802796#if HS_UNALIGNED_ByteArray_OPS_OK
803797 in create l (\ mba -> go ba mba l)
804798 where
805- go :: forall s . BA -> MBA s -> Int -> ST s ()
799+ go :: forall s . ByteArray -> MBA s -> Int -> ST s ()
806800 go ! ba ! mba ! l = do
807801 -- this is equivalent to: (q, r) = l `quotRem` 8
808802 let q = l `shiftR` 3
@@ -835,7 +829,7 @@ reverse = \sbs ->
835829#else
836830 in create l (\ mba -> go ba mba 0 l)
837831 where
838- go :: BA -> MBA s -> Int -> Int -> ST s ()
832+ go :: ByteArray -> MBA s -> Int -> Int -> ST s ()
839833 go ! ba ! mba ! i ! l
840834 | i >= l = return ()
841835 | otherwise = do
@@ -1437,7 +1431,7 @@ filter k = \sbs -> let l = length sbs
14371431 | otherwise -> createAndTrim' l $ \ mba -> go mba (asBA sbs) l
14381432 where
14391433 go :: forall s . MBA s -- mutable output bytestring
1440- -> BA -- input bytestring
1434+ -> ByteArray -- input bytestring
14411435 -> Int -- length of input bytestring
14421436 -> ST s Int
14431437 go ! mba ba ! l = go' 0 0
@@ -1485,7 +1479,7 @@ partition k = \sbs -> let len = length sbs
14851479 go :: forall s .
14861480 MBA s -- mutable output bytestring1
14871481 -> MBA s -- mutable output bytestring2
1488- -> BA -- input bytestring
1482+ -> ByteArray -- input bytestring
14891483 -> Int -- length of input bytestring
14901484 -> ST s (Int , Int ) -- (length mba1, length mba2)
14911485 go ! mba1 ! mba2 ba ! l = go' 0 0
@@ -1586,25 +1580,23 @@ createFromPtr !ptr len =
15861580 stToIO $ do
15871581 mba <- newByteArray len
15881582 copyAddrToByteArray ptr mba 0 len
1589- BA # ba# <- unsafeFreezeByteArray mba
1590- return (SBS ba# )
1583+ ShortByteString <$> unsafeFreezeByteArray mba
15911584
15921585
15931586------------------------------------------------------------------------
15941587-- Primop wrappers
15951588
1596- data BA = BA # ByteArray #
15971589data MBA s = MBA # (MutableByteArray # s )
15981590
1599- indexCharArray :: BA -> Int -> Char
1600- indexCharArray (BA # ba# ) (I # i# ) = C # (indexCharArray# ba# i# )
1591+ indexCharArray :: ByteArray -> Int -> Char
1592+ indexCharArray (ByteArray ba# ) (I # i# ) = C # (indexCharArray# ba# i# )
16011593
1602- indexWord8Array :: BA -> Int -> Word8
1603- indexWord8Array (BA # ba# ) (I # i# ) = W8 # (indexWord8Array# ba# i# )
1594+ indexWord8Array :: ByteArray -> Int -> Word8
1595+ indexWord8Array (ByteArray ba# ) (I # i# ) = W8 # (indexWord8Array# ba# i# )
16041596
16051597#if HS_UNALIGNED_ByteArray_OPS_OK
1606- indexWord8ArrayAsWord64 :: BA -> Int -> Word64
1607- indexWord8ArrayAsWord64 (BA # ba# ) (I # i# ) = W64 # (indexWord8ArrayAsWord64# ba# i# )
1598+ indexWord8ArrayAsWord64 :: ByteArray -> Int -> Word64
1599+ indexWord8ArrayAsWord64 (ByteArray ba# ) (I # i# ) = W64 # (indexWord8ArrayAsWord64# ba# i# )
16081600#endif
16091601
16101602newByteArray :: Int -> ST s (MBA s )
@@ -1619,10 +1611,10 @@ newPinnedByteArray len@(I# len#) =
16191611 ST $ \ s -> case newPinnedByteArray# len# s of
16201612 (# s', mba# # ) -> (# s', MBA # mba# # )
16211613
1622- unsafeFreezeByteArray :: MBA s -> ST s BA
1614+ unsafeFreezeByteArray :: MBA s -> ST s ByteArray
16231615unsafeFreezeByteArray (MBA # mba# ) =
16241616 ST $ \ s -> case unsafeFreezeByteArray# mba# s of
1625- (# s', ba# # ) -> (# s', BA # ba# # )
1617+ (# s', ba# # ) -> (# s', ByteArray ba# # )
16261618
16271619writeWord8Array :: MBA s -> Int -> Word8 -> ST s ()
16281620writeWord8Array (MBA # mba# ) (I # i# ) (W8 # w# ) =
@@ -1641,13 +1633,13 @@ copyAddrToByteArray (Ptr src#) (MBA# dst#) (I# dst_off#) (I# len#) =
16411633 ST $ \ s -> case copyAddrToByteArray# src# dst# dst_off# len# s of
16421634 s' -> (# s', () # )
16431635
1644- copyByteArrayToAddr :: BA -> Int -> Ptr a -> Int -> ST RealWorld ()
1645- copyByteArrayToAddr (BA # src# ) (I # src_off# ) (Ptr dst# ) (I # len# ) =
1636+ copyByteArrayToAddr :: ByteArray -> Int -> Ptr a -> Int -> ST RealWorld ()
1637+ copyByteArrayToAddr (ByteArray src# ) (I # src_off# ) (Ptr dst# ) (I # len# ) =
16461638 ST $ \ s -> case copyByteArrayToAddr# src# src_off# dst# len# s of
16471639 s' -> (# s', () # )
16481640
1649- copyByteArray :: BA -> Int -> MBA s -> Int -> Int -> ST s ()
1650- copyByteArray (BA # src# ) (I # src_off# ) (MBA # dst# ) (I # dst_off# ) (I # len# ) =
1641+ copyByteArray :: ByteArray -> Int -> MBA s -> Int -> Int -> ST s ()
1642+ copyByteArray (ByteArray src# ) (I # src_off# ) (MBA # dst# ) (I # dst_off# ) (I # len# ) =
16511643 ST $ \ s -> case copyByteArray# src# src_off# dst# dst_off# len# s of
16521644 s' -> (# s', () # )
16531645
@@ -1665,20 +1657,20 @@ copyMutableByteArray (MBA# src#) (I# src_off#) (MBA# dst#) (I# dst_off#) (I# len
16651657------------------------------------------------------------------------
16661658-- FFI imports
16671659--
1668- compareByteArrays :: BA -> BA -> Int -> Int
1660+ compareByteArrays :: ByteArray -> ByteArray -> Int -> Int
16691661compareByteArrays ba1 ba2 = compareByteArraysOff ba1 0 ba2 0
16701662
1671- compareByteArraysOff :: BA -- ^ array 1
1663+ compareByteArraysOff :: ByteArray -- ^ array 1
16721664 -> Int -- ^ offset for array 1
1673- -> BA -- ^ array 2
1665+ -> ByteArray -- ^ array 2
16741666 -> Int -- ^ offset for array 2
16751667 -> Int -- ^ length to compare
16761668 -> Int -- ^ like memcmp
16771669#if MIN_VERSION_base(4,11,0)
1678- compareByteArraysOff (BA # ba1# ) (I # ba1off# ) (BA # ba2# ) (I # ba2off# ) (I # len# ) =
1670+ compareByteArraysOff (ByteArray ba1# ) (I # ba1off# ) (ByteArray ba2# ) (I # ba2off# ) (I # len# ) =
16791671 I # (compareByteArrays# ba1# ba1off# ba2# ba2off# len# )
16801672#else
1681- compareByteArraysOff (BA # ba1# ) ba1off (BA # ba2# ) ba2off len =
1673+ compareByteArraysOff (ByteArray ba1# ) ba1off (ByteArray ba2# ) ba2off len =
16821674 assert (ba1off + len <= (I # (sizeofByteArray# ba1# )))
16831675 $ assert (ba2off + len <= (I # (sizeofByteArray# ba2# )))
16841676 $ fromIntegral $ accursedUnutterablePerformIO $
0 commit comments