beamable-0.1.0.2: src/Data/Beamable/Splits.hs
{-# LANGUAGE BangPatterns #-}
module Data.Beamable.Splits (
splitAtLastWord,
) where
import Data.Bits ((.&.))
import qualified Data.ByteString as B
import qualified Data.ByteString.Unsafe as B
{-# INLINE splitAtLastWord #-}
splitAtLastWord :: B.ByteString -> (B.ByteString, B.ByteString)
splitAtLastWord bs = let err = error "corrupted stream"
!pos = maybe err (+1) $ B.findIndex (\w -> w .&. 0x80 /= 0x80) bs
!this = B.unsafeTake pos bs
!rest = B.unsafeDrop pos bs
in (this, rest)