hw-json-1.0.0.0: src/HaskellWorks/Data/Json/Internal/Backend/Standard/ToBalancedParens64.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module HaskellWorks.Data.Json.Internal.Backend.Standard.ToBalancedParens64
( ToBalancedParens64(..)
) where
import Control.Applicative
import Data.Word
import HaskellWorks.Data.Json.Internal.Backend.Standard.MakeIndex
import qualified Data.ByteString.Lazy as LBS
import qualified Data.Vector.Storable as DVS
import qualified HaskellWorks.Data.Json.Internal.Backend.Standard.BlankedJson as J
genBitWordsForever :: LBS.ByteString -> Maybe (Word8, LBS.ByteString)
genBitWordsForever bs = LBS.uncons bs <|> Just (0, bs)
{-# INLINE genBitWordsForever #-}
class ToBalancedParens64 a where
toBalancedParens64 :: a -> DVS.Vector Word64
instance ToBalancedParens64 J.BlankedJson where
toBalancedParens64 (J.BlankedJson bj) = DVS.unsafeCast (DVS.unfoldrN newLen genBitWordsForever bpBS)
where bpBS = LBS.fromChunks (compressWordAsBit (blankedJsonToBalancedParens bj))
newLen = fromIntegral ((LBS.length bpBS + 7) `div` 8 * 8)