hw-json-standard-cursor-0.2.3.0: src/HaskellWorks/Data/Json/Standard/Cursor/Slow.hs
{-# LANGUAGE TypeFamilies #-}
module HaskellWorks.Data.Json.Standard.Cursor.Slow
( Cursor
, fromBsIbBp
, fromByteString
, fromForeignRegion
, fromString
) where
import Data.Word
import Foreign.ForeignPtr
import HaskellWorks.Data.Json.Standard.Cursor.Generic
import HaskellWorks.Data.Json.Standard.Cursor.IbBp
import HaskellWorks.Data.Json.Standard.Cursor.Specific
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BSC
import qualified Data.ByteString.Internal as BSI
import qualified Data.Vector.Storable as DVS
import qualified HaskellWorks.Data.BalancedParens as BP
import qualified HaskellWorks.Data.FromForeignRegion as F
import qualified HaskellWorks.Data.Json.Standard.Cursor.IbBp as J
data Slow
instance SpecificCursor Slow where
type CursorOf Slow = Cursor
type Cursor = GenericCursor BS.ByteString (DVS.Vector Word64) (BP.SimpleBalancedParens (DVS.Vector Word64))
fromBsIbBp :: BS.ByteString -> IbBp -> Cursor
fromBsIbBp bs ibBp = GenericCursor
{ cursorText = bs
, interests = ibPart
, balancedParens = BP.SimpleBalancedParens bpPart
, cursorRank = 1
}
where J.IbBp ibPart bpPart = ibBp
fromByteString :: BS.ByteString -> Cursor
fromByteString bs = fromBsIbBp bs (J.slowToIbBp bs)
fromForeignRegion :: F.ForeignRegion -> Cursor
fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)
fromString :: String -> Cursor
fromString = fromByteString . BSC.pack