
Exactly! I'm constantly irritated at work where the "wire model" is defined as:
Take this struct as defined in a header, cast it to char* or void* and blast it across the network (or write to disk). Do the converse on the other side. Swap as needed. Every time I point out the dangers in that approach, the response I get is "well, I made sure everything is aligned on four byte boundaries, and I know how to swap bytes".
I don't see what you find so irritating. First of all, as I've pointed out in other post, endianess is not a problem restricted to sending data over a network. Second, at some point you will have to have a raw datastructure which will be sent to a device. That is where endianness comes to play. Am I missing something?
All of my "home grown" marshalling designs require a copy somewhere -
Let's not get side tracked, please. I am not proposing a marshalling library but an endian one.
usually values are extracted from a byte stream into app safe structures (incoming) or appended to a byte stream (endian swapped as needed) for outgoing needs.
Doesn't this contradict your point from the beginning of the message? Sorry but I just feel confused now.
In most general marshalling / serialization designs where portable binary values are required, the transform step (from "wire" to "object / memory" model) requires a copy anyway.
Again, please let me repeat that I cannot say anything about a marshalling solution as I'm not proposing one. However, endian swapping can, in many cases, be done with 0 copying. Can you please, at least in pseudocode, describe how you would go from "raw data" to application data? Suppose I've just done the following: void * buffer = <allocate memory>; read(fh, buffer, size_of_buffer); //now what? That may help me understand your use case better.
The low-level endian facilities should not require an extra copy, but trying to minimize all copying and constraining the endian library design might be misguided.
I don't feel like I'm doing that. I have provided two interfaces - a copying and a non-copying one without compromising the design in any way. If you've looked at the code, can you perhaps be more specific about what you have in mind? Cheers, Tom