Copyright | (c) axionbuster 2025 |
---|---|
License | BSD-3-Clause |
Safe Haskell | None |
Language | GHC2021 |
M.Pack.Internal.Bit
Description
Implements bit-level serialization for boolean flags and bitsets, supporting both variable-length and fixed-length bit patterns.
Synopsis
- newtype Bitwise (i :: k) a = Bitwise {
- unbitwise :: a
- class Bitreppable i a where
- tobits0 :: a -> Builder
- frombits0 :: forall (st :: ZeroBitType) r. Parser st r a
- newtype Bitset = Bitset {}
- newtype FixedBitset (i :: k) = FixedBitset {}
Documentation
newtype Bitwise (i :: k) a Source #
a wrapper type that enables bit-level packing of boolean product types.
the type parameter i
specifies the underlying integral type used to store
the bits (e.g. Word8, Word16, etc). the type parameter a
is the product
type containing the boolean fields to be encoded.
Instances
Lift a => Lift (Bitwise i a :: Type) Source # | |||||
Functor (Bitwise i) Source # | |||||
NFData a => NFData (Bitwise i a) Source # | |||||
Defined in M.Pack.Internal.Bit | |||||
(Typeable i, Typeable k, Data a) => Data (Bitwise i a) Source # | |||||
Defined in M.Pack.Internal.Bit Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Bitwise i a -> c (Bitwise i a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Bitwise i a) # toConstr :: Bitwise i a -> Constr # dataTypeOf :: Bitwise i a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Bitwise i a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Bitwise i a)) # gmapT :: (forall b. Data b => b -> b) -> Bitwise i a -> Bitwise i a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Bitwise i a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Bitwise i a -> r # gmapQ :: (forall d. Data d => d -> u) -> Bitwise i a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Bitwise i a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Bitwise i a -> m (Bitwise i a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Bitwise i a -> m (Bitwise i a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Bitwise i a -> m (Bitwise i a) # | |||||
Generic (Bitwise i a) Source # | |||||
Defined in M.Pack.Internal.Bit Associated Types
| |||||
Read a => Read (Bitwise i a) Source # | |||||
Show a => Show (Bitwise i a) Source # | |||||
Eq a => Eq (Bitwise i a) Source # | |||||
Ord a => Ord (Bitwise i a) Source # | |||||
Defined in M.Pack.Internal.Bit | |||||
Hashable a => Hashable (Bitwise i a) Source # | |||||
Defined in M.Pack.Internal.Bit | |||||
Bitreppable i a => Pack (Bitwise i a) Source # | |||||
Bitreppable i a => Unpack (Bitwise i a) Source # | |||||
Defined in M.Pack.Internal.Bit | |||||
type Rep (Bitwise i a) Source # | |||||
Defined in M.Pack.Internal.Bit |
class Bitreppable i a where Source #
type class for types that can be represented as bit flags. provides methods for converting to and from bit representations.
most users should not need to implement this directly - just derive Generic
for your type and declare an instance without implementations:
instance Bitreppable Word8 MyFlags
Minimal complete definition
Nothing
Methods
tobits0 :: a -> Builder Source #
default tobits0 :: (Generic a, GBitRep (Rep a), Integral i, Bits i, Pack i) => a -> Builder Source #
frombits0 :: forall (st :: ZeroBitType) r. Parser st r a Source #
Instances
(Bits i, Integral i, Pack i, Unpack i) => Bitreppable i TeleportFlags Source # | do NOT use 8-bit packing for this type. use a type that is at least 16 bits wide |
Defined in M.Misc Methods tobits0 :: TeleportFlags -> Builder Source # frombits0 :: forall (st :: ZeroBitType) r. Parser st r TeleportFlags Source # | |
(Bits i, Integral i, Pack i, Unpack i) => Bitreppable i DisplayedSkinParts Source # | |
Defined in M.V769.I Methods tobits0 :: DisplayedSkinParts -> Builder Source # frombits0 :: forall (st :: ZeroBitType) r. Parser st r DisplayedSkinParts Source # |
variable-length bitset
(network representation: little-endian vector of Int64
s)
Instances
newtype FixedBitset (i :: k) Source #
a fixed-size bitset with i
bits
(implemented identically to Bitset
; only difference is that
when ser/de occurs, it pads missing bits with zeroes. hence it is
also possible to access out-of-bounds bits, and these bits will
get silently truncated when ser/de occurs)
Constructors
FixedBitset | |
Fields |
Instances
Lift (FixedBitset i :: Type) Source # | |||||
Defined in M.Pack.Internal.Bit Methods lift :: Quote m => FixedBitset i -> m Exp # liftTyped :: forall (m :: Type -> Type). Quote m => FixedBitset i -> Code m (FixedBitset i) # | |||||
NFData (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods rnf :: FixedBitset i -> () # | |||||
Bits (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods (.&.) :: FixedBitset i -> FixedBitset i -> FixedBitset i # (.|.) :: FixedBitset i -> FixedBitset i -> FixedBitset i # xor :: FixedBitset i -> FixedBitset i -> FixedBitset i # complement :: FixedBitset i -> FixedBitset i # shift :: FixedBitset i -> Int -> FixedBitset i # rotate :: FixedBitset i -> Int -> FixedBitset i # zeroBits :: FixedBitset i # bit :: Int -> FixedBitset i # setBit :: FixedBitset i -> Int -> FixedBitset i # clearBit :: FixedBitset i -> Int -> FixedBitset i # complementBit :: FixedBitset i -> Int -> FixedBitset i # testBit :: FixedBitset i -> Int -> Bool # bitSizeMaybe :: FixedBitset i -> Maybe Int # bitSize :: FixedBitset i -> Int # isSigned :: FixedBitset i -> Bool # shiftL :: FixedBitset i -> Int -> FixedBitset i # unsafeShiftL :: FixedBitset i -> Int -> FixedBitset i # shiftR :: FixedBitset i -> Int -> FixedBitset i # unsafeShiftR :: FixedBitset i -> Int -> FixedBitset i # rotateL :: FixedBitset i -> Int -> FixedBitset i # rotateR :: FixedBitset i -> Int -> FixedBitset i # popCount :: FixedBitset i -> Int # | |||||
(Typeable i, Typeable k) => Data (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> FixedBitset i -> c (FixedBitset i) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (FixedBitset i) # toConstr :: FixedBitset i -> Constr # dataTypeOf :: FixedBitset i -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (FixedBitset i)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (FixedBitset i)) # gmapT :: (forall b. Data b => b -> b) -> FixedBitset i -> FixedBitset i # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FixedBitset i -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FixedBitset i -> r # gmapQ :: (forall d. Data d => d -> u) -> FixedBitset i -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> FixedBitset i -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> FixedBitset i -> m (FixedBitset i) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FixedBitset i -> m (FixedBitset i) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FixedBitset i -> m (FixedBitset i) # | |||||
Enum (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods succ :: FixedBitset i -> FixedBitset i # pred :: FixedBitset i -> FixedBitset i # toEnum :: Int -> FixedBitset i # fromEnum :: FixedBitset i -> Int # enumFrom :: FixedBitset i -> [FixedBitset i] # enumFromThen :: FixedBitset i -> FixedBitset i -> [FixedBitset i] # enumFromTo :: FixedBitset i -> FixedBitset i -> [FixedBitset i] # enumFromThenTo :: FixedBitset i -> FixedBitset i -> FixedBitset i -> [FixedBitset i] # | |||||
Generic (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Associated Types
Methods from :: FixedBitset i -> Rep (FixedBitset i) x # to :: Rep (FixedBitset i) x -> FixedBitset i # | |||||
Num (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods (+) :: FixedBitset i -> FixedBitset i -> FixedBitset i # (-) :: FixedBitset i -> FixedBitset i -> FixedBitset i # (*) :: FixedBitset i -> FixedBitset i -> FixedBitset i # negate :: FixedBitset i -> FixedBitset i # abs :: FixedBitset i -> FixedBitset i # signum :: FixedBitset i -> FixedBitset i # fromInteger :: Integer -> FixedBitset i # | |||||
Read (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods readsPrec :: Int -> ReadS (FixedBitset i) # readList :: ReadS [FixedBitset i] # readPrec :: ReadPrec (FixedBitset i) # readListPrec :: ReadPrec [FixedBitset i] # | |||||
Real (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods toRational :: FixedBitset i -> Rational # | |||||
Show (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods showsPrec :: Int -> FixedBitset i -> ShowS # show :: FixedBitset i -> String # showList :: [FixedBitset i] -> ShowS # | |||||
Eq (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods (==) :: FixedBitset i -> FixedBitset i -> Bool # (/=) :: FixedBitset i -> FixedBitset i -> Bool # | |||||
Ord (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods compare :: FixedBitset i -> FixedBitset i -> Ordering # (<) :: FixedBitset i -> FixedBitset i -> Bool # (<=) :: FixedBitset i -> FixedBitset i -> Bool # (>) :: FixedBitset i -> FixedBitset i -> Bool # (>=) :: FixedBitset i -> FixedBitset i -> Bool # max :: FixedBitset i -> FixedBitset i -> FixedBitset i # min :: FixedBitset i -> FixedBitset i -> FixedBitset i # | |||||
Hashable (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit | |||||
KnownNat i => Pack (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods pack :: FixedBitset i -> Builder Source # | |||||
KnownNat i => Unpack (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit Methods unpack :: forall (st :: ZeroBitType) r. Parser st r (FixedBitset i) Source # | |||||
type Rep (FixedBitset i) Source # | |||||
Defined in M.Pack.Internal.Bit type Rep (FixedBitset i) = D1 ('MetaData "FixedBitset" "M.Pack.Internal.Bit" "mmm-0.1.0.0-LGnxNP98iy5DdX3UVbzAAf" 'True) (C1 ('MetaCons "FixedBitset" 'PrefixI 'True) (S1 ('MetaSel ('Just "getfixedbitset") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Integer))) |