module HaskellWorks.Data.Succinct.NearestNeighbour
  ( bitPred
  , bitSucc
  ) where

import           HaskellWorks.Data.Positioning
import           HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Rank1
import           HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Select1

bitPred :: (Rank1 v, Select1 v) => v -> Count -> Count
bitPred v p = select1 v (rank1 v p - 1)

bitSucc :: (Rank1 v, Select1 v) => v -> Count -> Count
bitSucc v p = select1 v (rank1 v p + 1)