hw-rankselect 0.1.0.0 → 0.1.0.1
raw patch · 5 files changed
+197/−194 lines, 5 files
Files
- hw-rankselect.cabal +1/−1
- src/HaskellWorks/Data/Succinct/BalancedParens/Internal.hs +165/−0
- src/HaskellWorks/Data/Succinct/BalancedParens/Simple.hs +1/−193
- src/HaskellWorks/Data/Succinct/RankSelect/Binary/Poppy512.hs +15/−0
- src/HaskellWorks/Data/Succinct/RankSelect/Binary/Poppy512S.hs +15/−0
hw-rankselect.cabal view
@@ -1,5 +1,5 @@ name: hw-rankselect-version: 0.1.0.0+version: 0.1.0.1 synopsis: Conduits for tokenizing streams. description: Please see README.md homepage: http://github.com/haskell-works/hw-rankselect#readme
src/HaskellWorks/Data/Succinct/BalancedParens/Internal.hs view
@@ -1,9 +1,18 @@+{-# LANGUAGE FlexibleInstances #-}+ module HaskellWorks.Data.Succinct.BalancedParens.Internal ( BalancedParens(..)+ , closeAt , depth+ , openAt , subtreeSize ) where +import Control.Monad+import qualified Data.Vector.Storable as DVS+import Data.Word+import HaskellWorks.Data.Bits.BitLength+import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Positioning import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Rank0 import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Rank1@@ -21,3 +30,159 @@ subtreeSize :: BalancedParens v => v -> Count -> Maybe Count subtreeSize v p = (\q -> (q - p + 1) `quot` 2) <$> findClose v p++closeAt :: TestBit a => a -> Count -> Bool+closeAt v c = not (v .?. toPosition (c - 1))+{-# INLINABLE closeAt #-}++openAt :: TestBit a => a -> Count -> Bool+openAt v c = v .?. toPosition (c - 1)+{-# INLINABLE openAt #-}++-----++findOpen' :: (BitLength a, TestBit a) => Count -> a -> Count -> Maybe Count+findOpen' c v p = if 0 < p && p <= bitLength v+ then if v `openAt` p+ then if c == 0+ then Just p+ else findOpen' (c - 1) v (p - 1)+ else findOpen' (c + 1) v (p - 1)+ else Nothing+{-# INLINABLE findOpen' #-}++findClose' :: (BitLength a, TestBit a) => Count -> a -> Count -> Maybe Count+findClose' c v p = if 1 < p && p <= bitLength v+ then if v `closeAt` p+ then if c == 0+ then Just p+ else findClose' (c + 1) v (p + 1)+ else findClose' (c - 1) v (p + 1)+ else Nothing+{-# INLINABLE findClose' #-}++instance BalancedParens [Bool] where+ findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)+ findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)+ enclose = findOpen' (Count 1)+ firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing+ nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))+ parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}++instance BalancedParens (DVS.Vector Word8) where+ findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)+ findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)+ enclose = findOpen' (Count 1)+ firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing+ nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))+ parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}++instance BalancedParens (DVS.Vector Word16) where+ findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)+ findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)+ enclose = findOpen' (Count 1)+ firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing+ nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))+ parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}++instance BalancedParens (DVS.Vector Word32) where+ findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)+ findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)+ enclose = findOpen' (Count 1)+ firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing+ nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))+ parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}++instance BalancedParens (DVS.Vector Word64) where+ findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)+ findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)+ enclose = findOpen' (Count 1)+ firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing+ nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))+ parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}++instance BalancedParens Word8 where+ findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)+ findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)+ enclose = findOpen' (Count 1)+ firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing+ nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))+ parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}++instance BalancedParens Word16 where+ findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)+ findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)+ enclose = findOpen' (Count 1)+ firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing+ nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))+ parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}++instance BalancedParens Word32 where+ findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)+ findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)+ enclose = findOpen' (Count 1)+ firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing+ nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))+ parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}++instance BalancedParens Word64 where+ findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)+ findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)+ enclose = findOpen' (Count 1)+ firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing+ nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))+ parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}
src/HaskellWorks/Data/Succinct/BalancedParens/Simple.hs view
@@ -3,31 +3,21 @@ module HaskellWorks.Data.Succinct.BalancedParens.Simple ( SimpleBalancedParens(..)- , closeAt- , findOpen- , findClose- , findClose'- , openAt ) where import Control.Monad-import qualified Data.Vector.Storable as DVS-import Data.Word import HaskellWorks.Data.Bits.BitLength import HaskellWorks.Data.Bits.BitShow import HaskellWorks.Data.Bits.BitWise-import HaskellWorks.Data.Positioning import HaskellWorks.Data.Succinct.BalancedParens.Internal import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Rank0 import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Rank1 import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Select0 import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Select1-import HaskellWorks.Data.Succinct.RankSelect.Binary.Poppy512-import HaskellWorks.Data.Succinct.RankSelect.Binary.Poppy512S import Prelude as P newtype SimpleBalancedParens a = SimpleBalancedParens a- deriving (BitLength, Eq, BitShow, TestBit, Rank0, Rank1, Select0, Select1)+ deriving (BalancedParens, BitLength, BitShow, Eq, Rank0, Rank1, Select0, Select1, TestBit) instance Functor SimpleBalancedParens where fmap f (SimpleBalancedParens a) = SimpleBalancedParens (f a)@@ -35,185 +25,3 @@ instance BitShow a => Show (SimpleBalancedParens a) where show = bitShow--closeAt :: TestBit a => a -> Count -> Bool-closeAt v c = not (v .?. toPosition (c - 1))-{-# INLINABLE closeAt #-}--openAt :: TestBit a => a -> Count -> Bool-openAt v c = v .?. toPosition (c - 1)-{-# INLINABLE openAt #-}--findOpen' :: (BitLength a, TestBit a) => Count -> SimpleBalancedParens a -> Count -> Maybe Count-findOpen' c v p = if 0 < p && p <= bitLength v- then if v `openAt` p- then if c == 0- then Just p- else findOpen' (c - 1) v (p - 1)- else findOpen' (c + 1) v (p - 1)- else Nothing-{-# INLINABLE findOpen' #-}--findClose' :: (BitLength a, TestBit a) => Count -> SimpleBalancedParens a -> Count -> Maybe Count-findClose' c v p = if 1 < p && p <= bitLength v- then if v `closeAt` p- then if c == 0- then Just p- else findClose' (c + 1) v (p + 1)- else findClose' (c - 1) v (p + 1)- else Nothing-{-# INLINABLE findClose' #-}--instance BalancedParens (SimpleBalancedParens [Bool]) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens (DVS.Vector Word8)) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens (DVS.Vector Word16)) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens (DVS.Vector Word32)) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens (DVS.Vector Word64)) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens Poppy512) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens Poppy512S) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens Word8) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens Word16) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens Word32) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}--instance BalancedParens (SimpleBalancedParens Word64) where- findOpen v p = if v `openAt` p then Just p else findOpen' (Count 0) v (p - 1)- findClose v p = if v `closeAt` p then Just p else findClose' (Count 0) v (p + 1)- enclose = findOpen' (Count 1)- firstChild v p = if openAt v p && openAt v (p + 1) then Just (p + 1) else Nothing- nextSibling v p = if closeAt v p then Nothing else openAt v `mfilter` (findClose v p >>= (\q -> if p /= q then return (q + 1) else Nothing))- parent v p = enclose v p >>= (\r -> if r >= 1 then return r else Nothing)- {-# INLINABLE findOpen #-}- {-# INLINABLE findClose #-}- {-# INLINABLE enclose #-}- {-# INLINABLE firstChild #-}- {-# INLINABLE nextSibling #-}- {-# INLINABLE parent #-}
src/HaskellWorks/Data/Succinct/RankSelect/Binary/Poppy512.hs view
@@ -14,6 +14,7 @@ import HaskellWorks.Data.Bits.PopCount.PopCount1 import HaskellWorks.Data.Positioning import HaskellWorks.Data.Search+import HaskellWorks.Data.Succinct.BalancedParens.Internal import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Rank0 import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Rank1 import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Select0@@ -65,3 +66,17 @@ where q = binarySearch (fromIntegral p) wordAt 0 (fromIntegral $ DVS.length i - 1) s = Count (fromIntegral q * 512 - (i !!! q)) wordAt o = fromIntegral o * 512 - (i !!! o)++instance BalancedParens Poppy512 where+ findOpen = findOpen . poppy512Bits+ findClose = findClose . poppy512Bits+ enclose = enclose . poppy512Bits+ firstChild = firstChild . poppy512Bits+ nextSibling = nextSibling . poppy512Bits+ parent = parent . poppy512Bits+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}
src/HaskellWorks/Data/Succinct/RankSelect/Binary/Poppy512S.hs view
@@ -13,6 +13,7 @@ import HaskellWorks.Data.Bits.PopCount.PopCount1 import HaskellWorks.Data.Positioning import HaskellWorks.Data.Search+import HaskellWorks.Data.Succinct.BalancedParens.Internal import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Rank0 import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Rank1 import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic.Select1@@ -86,3 +87,17 @@ (sampleMin, sampleMax) = sampleRange iv p iMin = fromIntegral $ (sampleMin - 1) `div` 512 :: Position iMax = fromIntegral $ ((sampleMax - 1) `div` 512) + 1 :: Position++instance BalancedParens Poppy512S where+ findOpen = findOpen . poppy512SBits+ findClose = findClose . poppy512SBits+ enclose = enclose . poppy512SBits+ firstChild = firstChild . poppy512SBits+ nextSibling = nextSibling . poppy512SBits+ parent = parent . poppy512SBits+ {-# INLINABLE findOpen #-}+ {-# INLINABLE findClose #-}+ {-# INLINABLE enclose #-}+ {-# INLINABLE firstChild #-}+ {-# INLINABLE nextSibling #-}+ {-# INLINABLE parent #-}