module HaskellWorks.Data.RankSelect.Internal.Word ( toBools , toBoolsDiff , partialToBoolsDiff ) where import Data.Word import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Positioning toBools :: Word64 -> [Bool] toBools :: Word64 -> [Bool] toBools Word64 w = Word64 -> [Bool] -> [Bool] toBoolsDiff Word64 w [] partialToBoolsDiff :: Count -> Word64 -> [Bool] -> [Bool] partialToBoolsDiff :: Word64 -> Word64 -> [Bool] -> [Bool] partialToBoolsDiff Word64 n Word64 w | Word64 n Word64 -> Word64 -> Bool forall a. Ord a => a -> a -> Bool > Word64 0 = Word64 -> Word64 -> [Bool] -> [Bool] partialToBoolsDiff (Word64 n Word64 -> Word64 -> Word64 forall a. Num a => a -> a -> a - Word64 1) Word64 w ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . ((Word64 w Word64 -> Position -> Bool forall a. TestBit a => a -> Position -> Bool .?. Word64 -> Position forall a b. (Integral a, Num b) => a -> b fromIntegral (Word64 n Word64 -> Word64 -> Word64 forall a. Num a => a -> a -> a - Word64 1))Bool -> [Bool] -> [Bool] forall a. a -> [a] -> [a] :) partialToBoolsDiff Word64 0 Word64 _ = [Bool] -> [Bool] forall a. a -> a id partialToBoolsDiff Word64 _ Word64 _ = [Char] -> [Bool] -> [Bool] forall a. HasCallStack => [Char] -> a error [Char] "Invalid size" toBoolsDiff :: Word64 -> [Bool] -> [Bool] toBoolsDiff :: Word64 -> [Bool] -> [Bool] toBoolsDiff Word64 w = Position -> [Bool] -> [Bool] go Position 0x00 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x01 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x02 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x03 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x04 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x05 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x06 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x07 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x08 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x09 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0a ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0b ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0c ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0d ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0e ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0f ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x10 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x11 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x12 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x13 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x14 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x15 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x16 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x17 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x18 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x19 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1a ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1b ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1c ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1d ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1e ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1f ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x20 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x21 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x22 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x23 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x24 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x25 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x26 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x27 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x28 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x29 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2a ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2b ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2c ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2d ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2e ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2f ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x30 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x31 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x32 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x33 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x34 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x35 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x36 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x37 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x38 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x39 ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3a ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3b ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3c ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3d ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3e ([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3f where go :: Position -> [Bool] -> [Bool] go :: Position -> [Bool] -> [Bool] go Position p = ((Word64 w Word64 -> Position -> Bool forall a. TestBit a => a -> Position -> Bool .?. Position p)Bool -> [Bool] -> [Bool] forall a. a -> [a] -> [a] :)