hw-rankselect-0.13.0.0: app/App/Commands/SelectAll.hs
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module App.Commands.SelectAll
( cmdSelectAll
) where
import Control.Lens
import Control.Monad
import Data.Generics.Product.Any
import Data.List
import Data.Monoid ((<>))
import HaskellWorks.Data.Bits.PopCount.PopCount1
import HaskellWorks.Data.FromForeignRegion
import HaskellWorks.Data.RankSelect.Base.Select1
import HaskellWorks.Data.RankSelect.CsPoppy
import HaskellWorks.Data.RankSelect.Poppy512
import Options.Applicative hiding (columns)
import System.Directory
import qualified App.Commands.Options.Type as Z
{-# ANN module ("HLint: ignore Reduce duplication" :: String) #-}
{-# ANN module ("HLint: ignore Redundant do" :: String) #-}
{-# ANN module ("HLint: ignore Redundant return" :: String) #-}
runSelectAll :: Z.SelectAllOptions -> IO ()
runSelectAll opts = case opts ^. the @"indexType" of
Z.CsPoppy -> do
entries <- getDirectoryContents "data"
let files = ("data/" ++) <$> (".ib" `isSuffixOf`) `filter` entries
forM_ files $ \file -> do
putStrLn $ "Loading cspoppy for " <> file
v :: CsPoppy <- mmapFromForeignRegion file
forM_ [1..popCount1 v] $ \i -> do
let !_ = select1 v i
return ()
return ()
Z.Poppy512 -> do
entries <- getDirectoryContents "data"
let files = ("data/" ++) <$> (".ib" `isSuffixOf`) `filter` entries
forM_ files $ \file -> do
putStrLn $ "Loading cspoppy for " <> file
v :: Poppy512 <- mmapFromForeignRegion file
forM_ [1..popCount1 v] $ \i -> do
let !_ = select1 v i
return ()
return ()
optsSelectAll :: Parser Z.SelectAllOptions
optsSelectAll = Z.SelectAllOptions
<$> option auto
( long "index-type"
<> help "Index type"
<> metavar "INDEX_TYPE"
)
cmdSelectAll :: Mod CommandFields (IO ())
cmdSelectAll = command "select-all" $ flip info idm $ runSelectAll <$> optsSelectAll