module HaskellWorks.Data.Json.Standard.Cursor.Load.Raw
  ( loadRawWithIndex
  ) where

import Data.Word
import HaskellWorks.Data.FromForeignRegion
import System.IO.MMap

import qualified Data.ByteString      as BS
import qualified Data.Vector.Storable as DVS

loadRawWithIndex :: String -> IO (BS.ByteString, DVS.Vector Word64, DVS.Vector Word64)
loadRawWithIndex :: String -> IO (ByteString, Vector Word64, Vector Word64)
loadRawWithIndex String
filename = do
  (ForeignPtr Word8, Int, Int)
jsonFr    <- String
-> Mode -> Maybe (Int64, Int) -> IO (ForeignPtr Word8, Int, Int)
forall a.
String -> Mode -> Maybe (Int64, Int) -> IO (ForeignPtr a, Int, Int)
mmapFileForeignPtr String
filename Mode
ReadOnly Maybe (Int64, Int)
forall a. Maybe a
Nothing
  (ForeignPtr Word8, Int, Int)
jsonIbFr  <- String
-> Mode -> Maybe (Int64, Int) -> IO (ForeignPtr Word8, Int, Int)
forall a.
String -> Mode -> Maybe (Int64, Int) -> IO (ForeignPtr a, Int, Int)
mmapFileForeignPtr (String
filename String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".ib.idx") Mode
ReadOnly Maybe (Int64, Int)
forall a. Maybe a
Nothing
  (ForeignPtr Word8, Int, Int)
jsonBpFr  <- String
-> Mode -> Maybe (Int64, Int) -> IO (ForeignPtr Word8, Int, Int)
forall a.
String -> Mode -> Maybe (Int64, Int) -> IO (ForeignPtr a, Int, Int)
mmapFileForeignPtr (String
filename String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".bp.idx") Mode
ReadOnly Maybe (Int64, Int)
forall a. Maybe a
Nothing
  let jsonBS :: ByteString
jsonBS  = (ForeignPtr Word8, Int, Int) -> ByteString
forall a. FromForeignRegion a => (ForeignPtr Word8, Int, Int) -> a
fromForeignRegion (ForeignPtr Word8, Int, Int)
jsonFr    :: BS.ByteString
  let jsonIb :: Vector Word64
jsonIb  = (ForeignPtr Word8, Int, Int) -> Vector Word64
forall a. FromForeignRegion a => (ForeignPtr Word8, Int, Int) -> a
fromForeignRegion (ForeignPtr Word8, Int, Int)
jsonIbFr  :: DVS.Vector Word64
  let jsonBp :: Vector Word64
jsonBp  = (ForeignPtr Word8, Int, Int) -> Vector Word64
forall a. FromForeignRegion a => (ForeignPtr Word8, Int, Int) -> a
fromForeignRegion (ForeignPtr Word8, Int, Int)
jsonBpFr  :: DVS.Vector Word64
  (ByteString, Vector Word64, Vector Word64)
-> IO (ByteString, Vector Word64, Vector Word64)
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString
jsonBS, Vector Word64
jsonIb, Vector Word64
jsonBp)