{-# 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 :: ByteString -> IbBp -> Cursor fromBsIbBp ByteString bs IbBp ibBp = GenericCursor :: forall t v w. t -> v -> w -> Count -> GenericCursor t v w GenericCursor { cursorText :: ByteString cursorText = ByteString bs , interests :: Vector Count interests = Vector Count ibPart , balancedParens :: SimpleBalancedParens (Vector Count) balancedParens = Vector Count -> SimpleBalancedParens (Vector Count) forall a. a -> SimpleBalancedParens a BP.SimpleBalancedParens Vector Count bpPart , cursorRank :: Count cursorRank = Count 1 } where J.IbBp Vector Count ibPart Vector Count bpPart = IbBp ibBp fromByteString :: BS.ByteString -> Cursor fromByteString :: ByteString -> Cursor fromByteString ByteString bs = ByteString -> IbBp -> Cursor fromBsIbBp ByteString bs (ByteString -> IbBp J.slowToIbBp ByteString bs) fromForeignRegion :: F.ForeignRegion -> Cursor fromForeignRegion :: ForeignRegion -> Cursor fromForeignRegion (ForeignPtr Word8 fptr, Int offset, Int size) = ByteString -> Cursor fromByteString (ForeignPtr Word8 -> Int -> Int -> ByteString BSI.fromForeignPtr (ForeignPtr Word8 -> ForeignPtr Word8 forall a b. ForeignPtr a -> ForeignPtr b castForeignPtr ForeignPtr Word8 fptr) Int offset Int size) fromString :: String -> Cursor fromString :: String -> Cursor fromString = ByteString -> Cursor fromByteString (ByteString -> Cursor) -> (String -> ByteString) -> String -> Cursor forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> ByteString BSC.pack