On Monday, 3 March 2014 at 21:44:16 UTC, Christof Schardt wrote:
I'm evaluating D and try to write a binary io class.
I got stuck with strings:
void rw(ref string x)
{
if(_isWriting)
{
int size = x.length;
_f.rawWrite((&size)[0..1]);
_f.rawWrite(x);
}
else
{
int size;
_f.rawRead((&size)[0..1]);
... what now?
}
}
Writing is ok, but how do I read the bytes to the
string x after having its size?
Assuming you're not expecting pre-allocation (which I infer from
your choice of "ref string" instead of "char[]"), you could do
this:
void rw(ref string x)
{
if(_isWriting)
{
size_t size = x.length;
_f.rawWrite((&size)[0..1]);
_f.rawWrite(x);
}
else
{
size_t size;
_f.rawRead((&size)[0..1]);
auto tmp = new char[size];
_f.rawRead(tmp);
import std.exception : assumeUnique;
x = tmp.assumeUnique;
}
}