arbitrary bitsize of variables
Daniel Keep
daniel.keep.lists at gmail.com
Sat Sep 29 07:47:32 PDT 2007
dominik wrote:
> "dominik" <aha at aha.com> wrote in message
> news:fdlnq6$f0i$1 at digitalmars.com...
>> Is it possible in D to do something like this (in C++):
>>
>> struct Testor {
>> int small_int: 5;
>> int even_smaller_int: 3;
>> };
>>
>> this basically says make one integer of 5 bit size, and other of 3 bit
>> size.. whole structure is 8bits long
>
> or is it possible to do it with the class - since, as I understood, struct
> is always by value in D - and class is by reference.
> I have tried with C++ syntax, but it fails on : - so I presume there is
> support for this, but I can't find correct syntax.
>
> thanks
No, you cannot do this directly in D. There was once support for a
'bit' type, but it was removed in favour of the 'bool' type; note that
'bool' variables take up a whole byte, not a single bit.
Your best bet might be to do something like this:
struct Tester
{
private ubyte storage;
ubyte small_int()
{
return storage & ((1<<5)-1));
}
ubyte small_int(ubyte v)
{
return (storage = (storage & ~((1<<5)-1)) | (v & ((1<<5)-1)));
}
// repeat for even_smaller_int :P
}
If you don't require those precise layout requirements, there's always
std.bitarray.
-- Daniel
More information about the Digitalmars-d-learn
mailing list