On Saturday, 7 November 2015 at 03:19:44 UTC, Charles wrote:
Hi guys,
It's me again... still having some issues pop up getting
started, but I remain hopeful I'll stop needing to ask so many
questions soon.
I'm trying to use std.bitmanip.read; however, am having some
issues using it. For basic testing I'm just trying to use:
read!double(endianess, ubyteArr).writeln;
endianess is an Endian from std.system, and ubyteArr is an 8
byte ubyte[].
When I run this I get:
Error: template std.bitmanip.read cannot deduce function from
argument types !(double)(Endian, ubyte[]), candidates are:
std.bitmanip.read(T, Endian endianness = Endian.bigEndian,
R)(ref R range) if (canSwapEndianness!T && isInputRange!R &&
is(ElementType!R : const(ubyte)))
dmd failed with exit code 1.
Clearly that didn't work, so I tried excluding the endianess:
read!double(ubyteArr).writeln;
and that does work! But its the wrong byte order, so its
incorrect anyways.
I went to std.bitmanip to look for unittests using the Endian,
and the only one that does uses read!(T, endianness), which
needs endianness to be known at compile time, which I don't
have.
Any suggestions?
You must create a classic run-time branch:
---
if(endianess == Endian.bigEndian)
read!(Endian.bigEndian, double)(ubyteArr).writeln;
else
read!(Endian.littleEndian, double)(ubyteArr).writeln;
---
or in the same fashion use a final switch.