Neil Mayhew | 23 May 15:28
Picon
Gravatar

Re: [integer] Promotion of endian library code from vault

On 5/23/08 6:19 AM, Roland Schwarz wrote:

> The proposed lib actually does have an unaligned type, i.e. it
> actually maps the types to char bytes[..] arrays. So the question
> remains what the standard has to say about alignment of
>
> struct foo {
>    char bytes_1 [3];
>    char bytes_2 [2];
>    char bytes_3 [1];
>    char bytes_4 [4];
> };
>
> Will such a struct be equivalent to
> char bytes[3+2+1+4] ?
>   

I am not a language lawyer, but my understanding is that struct members 
will be aligned according to their needs, and a type that contains only 
chars will need no special alignment. The endian library therefore takes 
care of alignment down to the byte level.

> 1) I wanted a way to control layout on a per struct basis. I wanted
>    to be able to go as low as bit position.
>   

I think it is very unlikely that a portable library would be able to get 
control over bit positions. At least, not in a purely data-declarative way.

However, you could use a boost endian type as the underlying storage and 
add methods to access bit ranges within that. For example, the addition 
of a general bit-range access method to the endian template would help 
here, one which takes a bit offset and a length, and you would then add 
access methods to the combined struct that call the bit-range one on 
individual endian fields.

> Hmm, and foo isn't necessarily a POD. Writing this out with
> binary write... what is guaranteed? I fear not much.
>   

Provided the alignment and length of endian fields is guaranteed (which 
I believe it is) then the only other thing that could get in the way is 
"hidden" content in the combined struct. However, provided there are no 
virtual methods, what you see is what you get. So I think binary 
read/write will always work, and it seems to me that this is the main 
point of endian. I'm not sure what the standard says, but it would work 
with any of the compilers I have used in the past 10 years or so.

--Neil
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Gmane