{-# 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 bs ibBp = GenericCursor
{ cursorText = bs
, interests = makeCsPoppy ibPart
, balancedParens = RM.mkRangeMin (makeCsPoppy bpPart)
, cursorRank = 1
}
where J.IbBp ibPart bpPart = ibBp
fromByteString :: BS.ByteString -> Cursor
fromByteString = fromByteStringViaBlanking
{-# DEPRECATED fromByteString "Use one of the other fromByteString* functions" #-}
fromByteStringViaBlanking :: BS.ByteString -> Cursor
fromByteStringViaBlanking bs = fromBsIbBp bs (J.slowToIbBp bs)
fromByteStringViaSimd :: BS.ByteString -> Cursor
fromByteStringViaSimd jsonBs = fromBsIbBp jsonBs (simdToIbBp jsonBs)
fromForeignRegion :: F.ForeignRegion -> Cursor
fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)
fromString :: String -> Cursor
fromString = fromByteString . BSC.pack