module HaskellWorks.Data.RankSelect.CsPoppy.Internal.Vector
  ( indexOrZero
  , lastOrZero
  ) where

import Data.Word
import HaskellWorks.Data.AtIndex
import HaskellWorks.Data.Positioning

import qualified Data.Vector.Storable as DVS

indexOrZero :: DVS.Vector Word64 -> Position -> Word64
indexOrZero _ i | i < 0     = 0
indexOrZero v i | i < end v = v !!! i
indexOrZero _ _ = 0
{-# INLINE indexOrZero #-}

lastOrZero :: DVS.Vector Word64 -> Word64
lastOrZero v | 0 < end v  = DVS.last v
lastOrZero _ = 0
{-# INLINE lastOrZero #-}