packages feed

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 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