{-# LANGUAGE BangPatterns #-}

module HaskellWorks.Data.Json.Backend.Standard.Index
  ( indexJson
  ) where

import Data.Word
import HaskellWorks.Data.BalancedParens.Simple
import HaskellWorks.Data.Json.Backend.Standard.Cursor.Generic

import qualified Data.ByteString                              as BS
import qualified Data.Vector.Storable                         as DVS
import qualified HaskellWorks.Data.ByteString                 as BS
import qualified HaskellWorks.Data.Json.Backend.Standard.Slow as SLOW

indexJson :: String -> IO ()
indexJson filename = do
  bs <- BS.mmap filename
  -- We use the SLOW reference implementation because we are writing to a file and will never query.
  let GenericCursor _ !ib (SimpleBalancedParens !bp) _ = SLOW.fromByteString bs
  let wib = DVS.unsafeCast ib :: DVS.Vector Word8
  let wbp = DVS.unsafeCast bp :: DVS.Vector Word8
  BS.writeFile (filename ++ ".ib.idx") (BS.toByteString wib)
  BS.writeFile (filename ++ ".bp.idx") (BS.toByteString wbp)