Reader no longer has direct access to MemoryStream.

This commit is contained in:
Ferdinand Majerech 2014-07-22 02:11:16 +02:00
parent 2728e63eb8
commit 5f9f12a672

View file

@ -64,8 +64,6 @@ class ReaderException : YAMLException
final class Reader final class Reader
{ {
private: private:
// Input stream.
MemoryStream memStream_;
// Allocated space for buffer_. // Allocated space for buffer_.
dchar[] bufferAllocated_ = null; dchar[] bufferAllocated_ = null;
// Buffer of currently loaded characters. // Buffer of currently loaded characters.
@ -104,8 +102,7 @@ final class Reader
} }
version(unittest) { endian_ = result.endian; } version(unittest) { endian_ = result.endian; }
memStream_ = new MemoryStream(result.array); decoder_ = UTFFastDecoder(new MemoryStream(result.array), result.encoding);
decoder_ = UTFFastDecoder(memStream_, result.encoding);
} }
@trusted nothrow @nogc ~this() @trusted nothrow @nogc ~this()
@ -303,7 +300,7 @@ final class Reader
void loadChars(size_t chars) @system void loadChars(size_t chars) @system
{ {
const oldLength = buffer_.length; const oldLength = buffer_.length;
const oldPosition = memStream_.position; const oldPosition = decoder_.position;
bufferReserve(buffer_.length + chars); bufferReserve(buffer_.length + chars);
buffer_ = bufferAllocated_[0 .. buffer_.length + chars]; buffer_ = bufferAllocated_[0 .. buffer_.length + chars];
@ -333,7 +330,7 @@ final class Reader
try{throw e;} try{throw e;}
catch(UTFException e) catch(UTFException e)
{ {
const position = memStream_.position; const position = decoder_.position;
throw new ReaderException(format("Unicode decoding error between bytes %s and %s : %s", throw new ReaderException(format("Unicode decoding error between bytes %s and %s : %s",
oldPosition, position, e.msg)); oldPosition, position, e.msg));
} }
@ -444,6 +441,9 @@ struct UTFBlockDecoder(size_t bufferSize_) if (bufferSize_ % 2 == 0)
/// Get encoding we're decoding from. /// Get encoding we're decoding from.
@property UTFEncoding encoding() const pure @safe nothrow @nogc { return encoding_; } @property UTFEncoding encoding() const pure @safe nothrow @nogc { return encoding_; }
/// Get the current position in stream.
size_t position() @trusted { return stream_.position; }
/// Are we done decoding? /// Are we done decoding?
@property bool done() const pure @safe nothrow @nogc @property bool done() const pure @safe nothrow @nogc
{ {