Mattias Holm wrote:
Bitfields in Phobos are defined portably: always populated from lsb to msb, the total size must be 8, 16, 32, or 64, and there is no hidden padding (you obtain padding with anonymous fields).

Andrei

If this is the case, the bitfields are not portable and the behaviour is the same as for GCC, except it is reversed.

The order should be:

LSByte to MSByte on little endian machines
MSByte to LSByte on big endian machines


This means that bitfields are defined in human readable order with respect to the physical layout on the machine.

The point being:

struct {
  uint a:4;
  uint b:28;
}

should give a structure:
 _ _______
|.|.......|

where each dot represents 4 bits. And this structure should be identical if the data is moved between different systems, that is a TCP header definition mapping into a byte stream, should be identical on both PPC and x86. If the LSB to MSB ordering is used in phobos, then the bitfields are as useful as the GCC bitfields, i.e. not at all.

Not at all is a tad extreme as I'm using them already. I see your point though. If you could submit a bug report, that would be great.


Andrei

Reply via email to