{-# LANGUAGE BangPatterns #-} module HaskellWorks.Data.Json.Backend.Standard.Load.Cursor ( loadCursor , loadCursorWithIndex , loadCursorWithCsPoppyIndex , loadCursorWithCsPoppyIndex2 ) where import Data.Word import HaskellWorks.Data.BalancedParens.Simple import HaskellWorks.Data.Json.Backend.Standard.Cursor.Generic import HaskellWorks.Data.Json.Backend.Standard.Load.Raw import HaskellWorks.Data.RankSelect.CsPoppy import qualified Data.ByteString.Internal as BSI import qualified Data.Vector.Storable as DVS import qualified HaskellWorks.Data.ByteString as BS import qualified HaskellWorks.Data.Json.Backend.Standard.Cursor.Fast as FAST import qualified HaskellWorks.Data.Json.Backend.Standard.Fast as FAST loadCursor :: String -> IO FAST.Cursor loadCursor path = do bs <- BS.mmap path let !cursor = FAST.fromByteString bs return cursor loadCursorWithIndex :: String -> IO (GenericCursor BSI.ByteString (DVS.Vector Word64) (SimpleBalancedParens (DVS.Vector Word64))) loadCursorWithIndex filename = do (jsonBS, jsonIb, jsonBp) <- loadRawWithIndex filename let cursor = GenericCursor jsonBS jsonIb (SimpleBalancedParens jsonBp) 1 return cursor loadCursorWithCsPoppyIndex :: String -> IO (GenericCursor BSI.ByteString CsPoppy (SimpleBalancedParens (DVS.Vector Word64))) loadCursorWithCsPoppyIndex filename = do (jsonBS, jsonIb, jsonBp) <- loadRawWithIndex filename let cursor = GenericCursor jsonBS (makeCsPoppy jsonIb) (SimpleBalancedParens jsonBp) 1 return cursor loadCursorWithCsPoppyIndex2 :: String -> IO (GenericCursor BSI.ByteString CsPoppy (SimpleBalancedParens CsPoppy)) loadCursorWithCsPoppyIndex2 filename = do (jsonBS, jsonIb, jsonBp) <- loadRawWithIndex filename let cursor = GenericCursor jsonBS (makeCsPoppy jsonIb) (SimpleBalancedParens (makeCsPoppy jsonBp)) 1 :: GenericCursor BSI.ByteString CsPoppy (SimpleBalancedParens CsPoppy) return cursor