Byte Order Swapping Function

Regan Heath regan at netmail.co.nz
Thu Jul 14 07:51:07 PDT 2011


On Thu, 14 Jul 2011 12:27:47 +0100, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> 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?

This is exactly what we need.  Sorry, I have neither the time nor the  
skill required.

-- 
Using Opera's revolutionary email client: http://www.opera.com/mail/


More information about the Digitalmars-d mailing list