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/