Transitive bit-packing of fields

Per Nordlöw via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Apr 30 07:58:48 PDT 2017


On Sunday, 30 April 2017 at 13:22:49 UTC, Stefan Koch wrote:
> 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 :)

Yeah, I thought so too. The question then becomes I have to write 
my own version of bitfields that can introspect the bitsize of 
it's arguments via some new trait bitsizeOf.


More information about the Digitalmars-d-learn mailing list