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;
        }
    }

Reply via email to