{-# LANGUAGE TypeFamilies #-}
module HaskellWorks.Data.Json.Standard.Cursor.Fast
( Cursor
, fromByteString
, fromByteStringViaBlanking
, fromByteStringViaSimd
, fromForeignRegion
, fromString
, fromBsIbBp
, simdToIbBp
) where
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 HaskellWorks.Data.RankSelect.CsPoppy1
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BSC
import qualified Data.ByteString.Internal as BSI
import qualified HaskellWorks.Data.BalancedParens.RangeMin as RM
import qualified HaskellWorks.Data.FromForeignRegion as F
import qualified HaskellWorks.Data.Json.Standard.Cursor.IbBp as J
data Fast
instance SpecificCursor Fast where
type CursorOf Fast = Cursor
type Cursor = GenericCursor BS.ByteString CsPoppy1 (RM.RangeMin CsPoppy1)
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 :: CsPoppy1
interests = Vector Count -> CsPoppy1
makeCsPoppy Vector Count
ibPart
, balancedParens :: RangeMin CsPoppy1
balancedParens = CsPoppy1 -> RangeMin CsPoppy1
forall a. AsVector64 a => a -> RangeMin a
RM.mkRangeMin (Vector Count -> CsPoppy1
makeCsPoppy 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 -> Cursor
fromByteStringViaBlanking
{-# DEPRECATED fromByteString "Use one of the other fromByteString* functions" #-}
fromByteStringViaBlanking :: BS.ByteString -> Cursor
fromByteStringViaBlanking :: ByteString -> Cursor
fromByteStringViaBlanking ByteString
bs = ByteString -> IbBp -> Cursor
fromBsIbBp ByteString
bs (ByteString -> IbBp
J.slowToIbBp ByteString
bs)
fromByteStringViaSimd :: BS.ByteString -> Cursor
fromByteStringViaSimd :: ByteString -> Cursor
fromByteStringViaSimd ByteString
jsonBs = ByteString -> IbBp -> Cursor
fromBsIbBp ByteString
jsonBs (ByteString -> IbBp
simdToIbBp ByteString
jsonBs)
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