hw-json-standard-cursor-0.2.1.0: src/HaskellWorks/Data/Json/Standard/Cursor/Fast.hs
{-# LANGUAGE TypeFamilies #-}
module HaskellWorks.Data.Json.Standard.Cursor.Fast
( Cursor
, fromByteString
, fromForeignRegion
, fromString
, fromBsIbBp
, simdToIbBp
) where
import Foreign.ForeignPtr
import HaskellWorks.Data.Json.Standard.Cursor.Generic
import HaskellWorks.Data.Json.Standard.Cursor.Internal.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.Internal.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 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