hw-json-0.9.0.0: src/HaskellWorks/Data/Json/Internal/ToBalancedParens64.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module HaskellWorks.Data.Json.Internal.ToBalancedParens64
( ToBalancedParens64(..)
) where
import Control.Applicative
import Data.Word
import HaskellWorks.Data.Json.Internal.MakeIndex
import qualified Data.ByteString.Lazy as LBS
import qualified Data.Vector.Storable as DVS
import qualified HaskellWorks.Data.Json.Internal.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)