Enum std.bitmanip.member bitfields
Allows creating bit fields inside structs and classes.
Declaration
enum bitfields(T...) = createFields!(createStoreName!T, 0, T).result;
Example
struct A { int a; mixin(bitfields!( uint, "x", 2, int, "y", 3, uint, "z", 2, bool, "flag", 1)); } A obj; obj.x = 2; obj.z = obj.x;
The example above creates a bitfield pack of eight bits, which fit in
one ubyte. The bitfields
are allocated starting from the
least significant bit, i.e. x occupies the two least significant bits
of the bitfields
storage.
The sum of all bit lengths in one bitfield instantiation must be exactly 8, 16, 32, or 64. If padding is needed, just allocate one bitfield with an empty name.
Example
struct A { mixin(bitfields!( bool, "flag1", 1, bool, "flag2", 1, uint, "", 6)); }
The type of a bit field can be any integral type or enumerated
type. The most efficient type to store in bitfields
is bool, followed by unsigned types, followed by signed types.
Authors
Walter Bright, Andrei Alexandrescu, Jonathan M Davis, Alex Rønne Petersen, Damian Ziemba Amaury SECHET