dizzy | 23 May 13:46

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

On Friday 23 May 2008 14:05:56 Roland Schwarz wrote:
> Neil Mayhew wrote:
> > This code is still in the vault, but I'd like to see it in the main part
> > of boost. What needs to be done to make this happen?
> >
> > The endian library is exactly what I've been looking for, and I would
> > really like to use it in my work, but I can't justify that to my
> > colleagues if it's not an official part of boost.
>
> This is an interesting library indeed! Thank you for having this
> brought up on the list again.
>
> However I have some concerns about usefulness when it comes to
> compiler independence and platform independence.
>
> One of the goals of such a library to be useful (for me at least) would
> be to be able to create compiler/platform independent binary files.
>
> I can see two problems here:
>
> 1) struct layout.
>    The standard gives no provisions for struct layout. So e.g. for
>
>    struct foo {
>       big8_t a;
>       big32_t b;
>    };
>
>    one cannot predict the alignment of the members. (Or am I wrong
>    in this respect?)

Correct, which is why protocol binary structures are never mapped directly in 
memory (you can with some compiler extensions but you won't gain anything 
since I/O is the bottleneck in such cases and not memory copy). Instead a 
serialization aproach should solve such issues.

> 2) The standard makes no provision for object representation, so
>    writing out a bit pattern (which essentially is object
>    representation) cannot be guaranteed to be read in on another
>    platform. (Irresepective of endianess.) The only way to do
>    this is to map object values to a stream of chars.
>    One way to implement this mapping is to convert to ASCII
>    representation (this is what the standard lib provides), but
>    as I believe this is not the only mapping possible.
>    I can imagine a mapping to char values that is less computing
>    intensive and will resemble binary a little closer.
>
> In an attempt to solve issue 1) I came up with something like:
>
> struct foo
> {
>   foo(char* begin, char* end)
>
>     : x(begin)
>
>     , y(begin)
>     , z(begin)
>   {}
>
>   field<int, bigint32_t, 0> x;
>   field<short int, bigint16_t, 32> y;
>   field<short int, bigint16_t, 48> z;
> };

That kinda looks like reinventing boost.serialization although with a 
different API (I did something similar in my code).

I'm not sure if boost.serialization allows read/write on different platforms 
right now, if not, something could be added to it to do so (a new kind of 
archive type maybe). 

--

-- 
Mihai RUSU					Email: dizzy <at> roedu.net
			"Linux is obsolete" -- AST
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Gmane