module Data.Array.Repa.Series.Sel
        ( Sel1 (..)
        , mkSel1)
where
import Data.Array.Repa.Series.Series    as S
import qualified Data.Vector.Unboxed    as U
import GHC.Exts

-- | Selectors.
data Sel1 k1 k2
        = Sel1
        { sel1Length    :: Int#
        , sel1Flags     :: !(U.Vector Bool) }


-- | Create a new selector from a series of flags.
mkSel1  :: Series k1 Bool 
        -> (forall k2. Sel1 k1 k2 -> a)
        -> a

mkSel1 sFlags worker
 = let  sel1    = Sel1
                { sel1Length    = S.length sFlags
                , sel1Flags     = S.seriesVector sFlags }
   in   worker sel1
{-# INLINE [1] mkSel1 #-}