| Copyright | (c) Alice Rixte 2025 |
|---|---|
| License | BSD 3 |
| Maintainer | alice.rixte@u-bordeaux.fr |
| Stability | stable |
| Portability | portable |
| Safe Haskell | None |
| Language | GHC2021 |
Data.Bitmask
Description
Bitmasks for efficient storing of boolean flags
Synopsis
- data Bitmask w (flag :: k)
- type Bitmask8 = Bitmask Word8 :: k -> Type
- type Bitmask16 = Bitmask Word16 :: k -> Type
- type Bitmask32 = Bitmask Word32 :: k -> Type
- type Bitmask64 = Bitmask Word64 :: k -> Type
- fromBits :: forall {k} w (flag :: k). w -> Bitmask w flag
- toBits :: forall {k} w (flag :: k). Bitmask w flag -> w
- checkBitmask :: forall flag w. (FiniteBits w, Enum flag, Bounded flag) => Bitmask w flag -> Bool
- noFlag :: forall {k} w (flag :: k). Bits w => Bitmask w flag
- allFlags :: (FiniteBits w, Enum flag) => Bitmask w flag
- fromFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag
- toFlags :: forall flag w. (FiniteBits w, Enum flag, Bounded flag) => Bitmask w flag -> [flag]
- fromExceptFlags :: (FiniteBits w, Enum flag) => [flag] -> Bitmask w flag
- toExceptFlags :: forall flag w. (FiniteBits w, Enum flag, Bounded flag) => Bitmask w flag -> [flag]
- fromFlagsBool :: forall flag w. (Bits w, Enum flag) => [(flag, Bool)] -> Bitmask w flag
- toFlagsBool :: forall flag w. (FiniteBits w, Enum flag, Bounded flag) => Bitmask w flag -> [(flag, Bool)]
- getFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bool
- getFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> [Bool]
- addFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bitmask w flag
- addFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> Bitmask w flag
- deleteFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bitmask w flag
- deleteFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> Bitmask w flag
- flipFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bitmask w flag
- flipFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> Bitmask w flag
- setFlag :: (Bits w, Enum flag) => flag -> Bool -> Bitmask w flag -> Bitmask w flag
- setFlags :: (Bits w, Enum flag) => [(flag, Bool)] -> Bitmask w flag -> Bitmask w flag
- modifyFlag :: (Bits w, Enum flag) => flag -> (Bool -> Bool) -> Bitmask w flag -> Bitmask w flag
- modifyFlags :: (Bits w, Enum flag) => [flag] -> (Bool -> Bool) -> Bitmask w flag -> Bitmask w flag
- (.&.) :: Bits a => a -> a -> a
- (.|.) :: Bits a => a -> a -> a
- xor :: Bits a => a -> a -> a
- complement :: Bits a => a -> a
Documentation
data Bitmask w (flag :: k) Source #
A bitmask that contains boolean flags
- The
flagtype should be an enumeration type (i.e. an instance ofEnum). - The
wtype should be an integral type (e.g.Word8,Word32, etc.) that supports bitwise operations. - The number of bits in
wmust be at least as many as the number of constructors inflag.
- Usage:
data PizzaTopping = Cheese | Mushrooms | Pineapple | Ham deriving (Show, Eq, Bounded, Enum) type PizzaMask = Bitmask Word8 PizzaTopping
Instances
| Bits w => Bits (Bitmask w flag) Source # | |
Defined in Data.Bitmask.Internal Methods (.&.) :: Bitmask w flag -> Bitmask w flag -> Bitmask w flag # (.|.) :: Bitmask w flag -> Bitmask w flag -> Bitmask w flag # xor :: Bitmask w flag -> Bitmask w flag -> Bitmask w flag # complement :: Bitmask w flag -> Bitmask w flag # shift :: Bitmask w flag -> Int -> Bitmask w flag rotate :: Bitmask w flag -> Int -> Bitmask w flag setBit :: Bitmask w flag -> Int -> Bitmask w flag clearBit :: Bitmask w flag -> Int -> Bitmask w flag complementBit :: Bitmask w flag -> Int -> Bitmask w flag testBit :: Bitmask w flag -> Int -> Bool bitSizeMaybe :: Bitmask w flag -> Maybe Int bitSize :: Bitmask w flag -> Int isSigned :: Bitmask w flag -> Bool shiftL :: Bitmask w flag -> Int -> Bitmask w flag unsafeShiftL :: Bitmask w flag -> Int -> Bitmask w flag shiftR :: Bitmask w flag -> Int -> Bitmask w flag unsafeShiftR :: Bitmask w flag -> Int -> Bitmask w flag rotateL :: Bitmask w flag -> Int -> Bitmask w flag | |
| Show w => Show (Bitmask w flag) Source # | |
| Eq w => Eq (Bitmask w flag) Source # | |
| Ord w => Ord (Bitmask w flag) Source # | |
Defined in Data.Bitmask.Internal Methods compare :: Bitmask w flag -> Bitmask w flag -> Ordering (<) :: Bitmask w flag -> Bitmask w flag -> Bool (<=) :: Bitmask w flag -> Bitmask w flag -> Bool (>) :: Bitmask w flag -> Bitmask w flag -> Bool (>=) :: Bitmask w flag -> Bitmask w flag -> Bool | |
Conversion to and from bits
Check bitmask validity
checkBitmask :: forall flag w. (FiniteBits w, Enum flag, Bounded flag) => Bitmask w flag -> Bool Source #
Check that a bitmask can represent all flags.
>>>checkBitmask (allFlags :: Bitmask8 PizzaTopping)True
Bitmask creation
noFlag :: forall {k} w (flag :: k). Bits w => Bitmask w flag Source #
A bitmask with all flags set to False.
>>>getFlag Mushrooms (noFlag :: PizzaMask)False
allFlags :: (FiniteBits w, Enum flag) => Bitmask w flag Source #
A bitmask with all flags set to True.
>>>getFlag Mushrooms (allFlags :: PizzaMask)True
fromFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag Source #
Create a bitmask from a list of flags to set to True.
>>>hawaiian = fromFlags [Pineapple, Ham, Cheese] :: PizzaMask
toFlags :: forall flag w. (FiniteBits w, Enum flag, Bounded flag) => Bitmask w flag -> [flag] Source #
Convert a bitmask to a list of flags that are set to True.
>>>toFlags hawaiian[Cheese,Pineapple,Ham]
fromExceptFlags :: (FiniteBits w, Enum flag) => [flag] -> Bitmask w flag Source #
Create a bitmask from a list of flags to set to False
>>>veggie = fromExceptFlags [Ham] :: PizzaMask
toExceptFlags :: forall flag w. (FiniteBits w, Enum flag, Bounded flag) => Bitmask w flag -> [flag] Source #
Convert a bitmask to a list of flags that are set to False.
>>>toExceptFlags veggie[Ham]
fromFlagsBool :: forall flag w. (Bits w, Enum flag) => [(flag, Bool)] -> Bitmask w flag Source #
Convert an association list of flags and boolean values to a bitmask.
>>>funghi = fromFlagsBool [(Cheese, True), (Ham, False), (Mushrooms, True)] :: PizzaMask
toFlagsBool :: forall flag w. (FiniteBits w, Enum flag, Bounded flag) => Bitmask w flag -> [(flag, Bool)] Source #
Convert a bitmask to an association list of flags and boolean values.
>>>toFlagsBool funghi[(Cheese,True),(Mushrooms,True),(Pineapple,False),(Ham,False)]
Flag querying
getFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bool Source #
Get a flag from a bitmask.
>>>getFlag Mushrooms hawaiianFalse
getFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> [Bool] Source #
Get multiple flags from a bitmask.
>>>getFlags [Cheese, Mushrooms] hawaiian[True,False]
Flag modification
addFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bitmask w flag Source #
Add a flag to a bitmask (set it to True).
>>>margherita = addFlag Cheese (noFlag :: PizzaMask)
addFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> Bitmask w flag Source #
Add multiple flags to a bitmask (set them to True).
>>>hawaiian = addFlags [Pineapple, Ham] margherita
deleteFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bitmask w flag Source #
Remove a flag from a bitmask (set it to False).
>>>veggie = deleteFlag Ham (allFlags :: PizzaMask)
deleteFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> Bitmask w flag Source #
Remove multiple flags from a bitmask (set them to False).
>>>picky = deleteFlags [Pineapple, Ham] (allFlags :: PizzaMask)
flipFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bitmask w flag Source #
Flip a flag in a bitmask.
>>>margherita = flipFlag Cheese (noFlag :: PizzaMask)
flipFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> Bitmask w flag Source #
Flip multiple flags in a bitmask.
>>>funghi = flipFlags [Mushrooms, Ham, Pineapple] hawaiian
setFlag :: (Bits w, Enum flag) => flag -> Bool -> Bitmask w flag -> Bitmask w flag Source #
Set a flag in a bitmask.
>>>funghi = setFlag Mushrooms True margherita
setFlags :: (Bits w, Enum flag) => [(flag, Bool)] -> Bitmask w flag -> Bitmask w flag Source #
Set multiple flags in a bitmask.
>>>hawaiian = setFlags [(Ham, True), (Pineapple, True)] margherita
modifyFlag :: (Bits w, Enum flag) => flag -> (Bool -> Bool) -> Bitmask w flag -> Bitmask w flag Source #
Modify a flag in a bitmask.
>>>veggie = modifyFlag Ham not (allFlags :: PizzaMask)
modifyFlags :: (Bits w, Enum flag) => [flag] -> (Bool -> Bool) -> Bitmask w flag -> Bitmask w flag Source #
Modify multiple flags in a bitmask.
>>>picky = modifyFlags [Pineapple, Ham] not (allFlags :: PizzaMask)
Re-exports from Data.Bits
complement :: Bits a => a -> a #