On Thursday 14 July 2011 10:55:49 Regan Heath wrote: > 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..
Oh, it could be done, and it probably should be done. But other than the 64- bit version (since it's not particularly standard in C or C++), the functions are there if you need them. - Jonathan M Davis