On Thu, 14 Jul 2011 08:14:10 +0100, Jonathan M Davis <jmdavisp...@gmx.com> wrote:

On Thursday 14 July 2011 00:03:23 Andrew Wiley wrote:
On Wed, Jul 13, 2011 at 11:59 PM, Jonathan M Davis
<jmdavisp...@gmx.com>wrote:
> On Wednesday 13 July 2011 23:37:02 Andrew Wiley wrote:
> > Hey, does anyone else thing a function like this belongs in Phobos,
> > and
>
> if
>
> > so, where do you think it should go?
> >
> > T ntoh(T)(T val) if (__traits(isArithmetic, T)) {
> > version(BigEndian) {
> >
> >  return val;
> >
> > }
> > else version (LittleEndian) {
> >
> >  ubyte[] arr = (cast(ubyte*)&val)[0 .. T.sizeof];
> >
> > ubyte temp;
> > for(int i = 0; i < T.sizeof/2; i++) {
> >
> >  temp = arr[i];
> >
> > arr[i] = arr[T.sizeof - i - 1];
> > arr[T.sizeof - i - 1] = temp;
> >
> >  }
> >
> > return val;
> > }
> >
> >  else static assert(0, "Are you sure you're using a computer?");
> >  }
> >
> > I was looking for something along these lines in the docs today and
>
> couldn't
>
> > find it. It looks like there's a stream in std.stream to do this,
> > but,
> > well, I think we've all been pretending std.stream doesn't exist for
> > a
> > while now.
>
> core.sys.posix.arpa.inet.d
> std.c.windows.winsock.d

Both of those are platform specific, and neither of them is general enough
to handle longs.

They're only platform-specific in that you have to import one in Posix and another in Windows. Other than that, they're completely platform-independent.
They're the standard functions for it in C/C++. Now, it's true that there
isn't one for ulong (since there is no standard one for 64-bit in C/C++), and there would definitely be some value in having a function which was overloaded on the type so that you could just use the one function for ushort, uint, and ulong, but ntohs and ntohl _are_ provided by druntime and Phobos. So, it's not
like nothing is there.

I did have to create a 64-bit version for std.datetime, so it has a private function called endianSwap64 to do the job. So, it's not like I'm saying that the situation couldn't be improved, but druntime and Phobos do currently give
you the exact same thing that C and C++ do.

The crypto library I have been meaning to polish up and submit for inclusion into phobos needs these functions in several variants. I was hoping they could/would be included somewhere more 'general' at some stage, and any duplicates like those already mentioned removed..

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

Reply via email to