On Sunday, 30 April 2017 at 11:02:52 UTC, Nordlöw wrote:
Have anybody found a way to do transitive packing of bitfields?
For instance, in
import std.bitmanip : bitfields;
struct X
{
// one bit too many to fit in one byte
mixin(bitfields!(bool, `a`, 1,
bool, `b`, 1,
ubyte, `c`, 7,
ubyte, `_pad`, 7);
}
struct Y
{
// one unused bit
mixin(bitfields!(ubyte, `d`, 7,
ubyte, `_pad`, 1);
}
struct XY
{
X x;
Y y;
}
`XY` will currently occupy 4 bytes, when only 1+1+7+7=16 bits
are actually used in `a`, `b`, `c` and `d`.
Rust just got support for this.
You'd have to write your own template to do it; it's easy though
:)