{-# 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)