|
Boost : |
Subject: [boost] [endian] views and conversions
From: vicente.botet (vicente.botet_at_[hidden])
Date: 2010-06-08 13:37:12
Hi,
I have pushed the endian typed approach a little more.
Given an C/C++ builtin integer, we can see it as an endian with a given endianness using a cast or view operation. This operation doesn't do any conversion when its parameter is a fundamental (integer) type, but just let the user states that the integer stored in the variable has been stored with the given endianness.
int b;
Let me say that b contains an integer with big endian format (this has been done by reading from an external device, e.g.) The following expression as<big>(i) or endian_cast<big>(i) will see the i storage as a big endian integer holder.
Now we can convert from big to native as follows
int n;
as<native>(n) = as<big>(b);
as<endianness>(x) can be implemented as a function that return a endian reference to an integer with a specific endianness. Let me call this class endian_view. endian_view will define the assignment operator so the there is a conversion
when both sides have the same endianness.
In place conversion can be done as follows:
as<native>(b) = as<big>(b);
In order to support the in place version the assignement operator on endian_views, needs to check in addition if the reference integer is the same.
But this check could be inefficient when we are converting a whole structure.
The same operation can be overloaded for endian_views and do a in_place conversion in this case
as<native>(as<big>(b));
can be read as: make the integer b (which is formatted with big endian format) have a native endian format.
Just some more thougths that can grow on the endian forest.
Best,
_____________________
Vicente Juan Botet Escribá
http://viboes.blogspot.com/
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk