On 7/14/11 5:51 AM, Regan Heath wrote:
That's my point. I need 8/16/32/64/128 bit versions and it really would
be better if there were general variants. My version are less than
optimal, but do use intrinsics where possible. Someone else can do a far
better job than I, and it really should be done once, by that person.
Surely we have the infrastructure for someone to add this to phobos? If
something this simple can't or won't be done, what hope do we have!?

I think we should have these functions in std.bitmanip:

T toBigEndian(T)(T val) if (isArithmetic!T || isSomeChar!T);
T toLittleEndian(T)(T val) if (isArithmetic!T || isSomeChar!T);
T bigEndianToNative(T)(T val) if (isArithmetic!T || isSomeChar!T);
T littleEndianToNative(T)(T val) if (isArithmetic!T || isSomeChar!T);

That means all characters, all integers, and all floating point numbers. The implementations would opportunistically use intrinsics and other specialized means.

The documentation should specify the relationship to htonl and ntohl.

If there's a need for converting endianness of larger buffers, we might add:

ubyte[] toBigEndian(ubyte[] val);
ubyte[] toLittleEndian(ubyte[] val);
ubyte[] bigEndianToNative(ubyte[] val);
ubyte[] littleEndianToNative(ubyte[] val);

They'd use std.algorithm.reverse internally as needed.

It's a sweet piece of work. Anyone have the time to prepare a pull request?


Andrei

Reply via email to