hw-rankselect-base 0.3.1.0 → 0.3.2.0
raw patch · 3 files changed
+16/−37 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- HaskellWorks.Data.RankSelect.Base.Rank1: instance HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 [GHC.Types.Bool]
- HaskellWorks.Data.RankSelect.Base.Rank1: instance HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 [GHC.Word.Word16]
- HaskellWorks.Data.RankSelect.Base.Rank1: instance HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 [GHC.Word.Word32]
- HaskellWorks.Data.RankSelect.Base.Rank1: instance HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 [GHC.Word.Word64]
- HaskellWorks.Data.RankSelect.Base.Rank1: instance HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 [GHC.Word.Word8]
+ HaskellWorks.Data.RankSelect.Base.Rank1: instance (HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, Data.Bits.BitSize.BitSize w) => HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 [w]
+ HaskellWorks.Data.RankSelect.Base.Rank1: instance HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 GHC.Types.Bool
Files
- hw-rankselect-base.cabal +2/−2
- src/HaskellWorks/Data/RankSelect/Base/Rank1.hs +13/−32
- src/HaskellWorks/Data/RankSelect/Base/Select1.hs +1/−3
hw-rankselect-base.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 1503b4be7853227912b197998c9832b625fa280dfd157c26f2112deae20aba36+-- hash: 62993e05ec2c3438f6c9ed9f96a5f8a6dbb0481b34e832e5cc5e02fd2929dfce name: hw-rankselect-base-version: 0.3.1.0+version: 0.3.2.0 synopsis: Rank-select base description: Please see README.md category: Data
src/HaskellWorks/Data/RankSelect/Base/Rank1.hs view
@@ -6,6 +6,7 @@ ( Rank1(..) ) where +import Data.Bits.BitSize import Data.Word import HaskellWorks.Data.AtIndex import HaskellWorks.Data.Bits.BitShown@@ -44,40 +45,20 @@ rank1 v i = popCount1 (v .&. ((1 .<. fromIntegral i) - 1)) {-# INLINABLE rank1 #-} -instance Rank1 [Bool] where- rank1 = go 0- where go r _ 0 = r- go r (True :bs) p = go (r + 1) bs (p - 1)- go r (False:bs) p = go r bs (p - 1)- go _ [] _ = error "Out of range"- {-# INLINABLE rank1 #-}--instance Rank1 [Word8] where- rank1 v p = popCount1 prefix + if r == 0 then 0 else (`rank1` r) maybeElem- where (q, r) = if p < 1 then (0, 0) else ((p - 1) `quot` elemFixedBitSize v, ((p - 1) `rem` elemFixedBitSize v) + 1)- prefix = take (fromIntegral q) v- maybeElem = v !! fromIntegral q- {-# INLINABLE rank1 #-}--instance Rank1 [Word16] where- rank1 v p = popCount1 prefix + if r == 0 then 0 else (`rank1` r) maybeElem- where (q, r) = if p < 1 then (0, 0) else ((p - 1) `quot` elemFixedBitSize v, ((p - 1) `rem` elemFixedBitSize v) + 1)- prefix = take (fromIntegral q) v- maybeElem = v !! fromIntegral q- {-# INLINABLE rank1 #-}+instance Rank1 Bool where+ rank1 True 0 = 0+ rank1 True 1 = 1+ rank1 False 0 = 0+ rank1 False 1 = 0+ rank1 _ _ = error "Invalid position for rank1" -instance Rank1 [Word32] where- rank1 v p = popCount1 prefix + if r == 0 then 0 else (`rank1` r) maybeElem- where (q, r) = if p < 1 then (0, 0) else ((p - 1) `quot` elemFixedBitSize v, ((p - 1) `rem` elemFixedBitSize v) + 1)- prefix = take (fromIntegral q) v- maybeElem = v !! fromIntegral q- {-# INLINABLE rank1 #-}+instance (PopCount1 w, Rank1 w, BitSize w) => Rank1 [w] where+ rank1 = go 0+ where go c (w:ws) p = if p <= bitCount w+ then c + rank1 w p+ else go (c + popCount1 w) ws (p - bitCount w)+ go c [] _ = c -instance Rank1 [Word64] where- rank1 v p = popCount1 prefix + if r == 0 then 0 else (`rank1` r) maybeElem- where (q, r) = if p < 1 then (0, 0) else ((p - 1) `quot` elemFixedBitSize v, ((p - 1) `rem` elemFixedBitSize v) + 1)- prefix = take (fromIntegral q) v- maybeElem = v !! fromIntegral q {-# INLINABLE rank1 #-} instance Rank1 (DV.Vector Word8) where
src/HaskellWorks/Data/RankSelect/Base/Select1.hs view
@@ -75,9 +75,7 @@ {-# INLINE select1 #-} instance Select1 Bool where- select1 b c = if c == 1- then if b then 1 else 0- else 0+ select1 b c = if c == 1 && b then 1 else 0 instance Select1 (DVS.Vector Word8) where select1 v c = go 0 c 0