it compiles at the tests run without segfault
I call this a first step
This commit is contained in:
parent
daf1a0064f
commit
41133e3b0d
|
@ -253,7 +253,7 @@ struct Emitter
|
|||
stream_.writeExact(buffer.ptr, buffer.length * dchar.sizeof);
|
||||
break;
|
||||
}
|
||||
catch(WriteException e)
|
||||
catch(Exception e)
|
||||
{
|
||||
throw new Error("Unable to write to stream: " ~ e.msg);
|
||||
}
|
||||
|
|
|
@ -993,7 +993,7 @@ void testEndian(R)()
|
|||
|
||||
void testPeekPrefixForward(R)()
|
||||
{
|
||||
import std.stream;
|
||||
import dyaml.stream;
|
||||
writeln(typeid(R).toString() ~ ": peek/prefix/forward unittest");
|
||||
ubyte[] data = ByteOrderMarks[BOM.UTF8] ~ cast(ubyte[])"data";
|
||||
auto reader = new R(data);
|
||||
|
@ -1011,7 +1011,7 @@ void testPeekPrefixForward(R)()
|
|||
|
||||
void testUTF(R)()
|
||||
{
|
||||
import std.stream;
|
||||
import dyaml.stream;
|
||||
writeln(typeid(R).toString() ~ ": UTF formats unittest");
|
||||
dchar[] data = cast(dchar[])"data";
|
||||
void utf_test(T)(T[] data, BOM bom)
|
||||
|
|
|
@ -1,8 +1,35 @@
|
|||
module dyaml.stream;
|
||||
|
||||
enum BOM {
|
||||
UTF8, /// UTF-8
|
||||
UTF16LE, /// UTF-16 Little Endian
|
||||
UTF16BE, /// UTF-16 Big Endian
|
||||
UTF32LE, /// UTF-32 Little Endian
|
||||
UTF32BE, /// UTF-32 Big Endian
|
||||
}
|
||||
|
||||
import std.system;
|
||||
|
||||
private enum int NBOMS = 5;
|
||||
immutable Endian[NBOMS] BOMEndian =
|
||||
[ std.system.endian,
|
||||
Endian.littleEndian, Endian.bigEndian,
|
||||
Endian.littleEndian, Endian.bigEndian
|
||||
];
|
||||
|
||||
immutable ubyte[][NBOMS] ByteOrderMarks =
|
||||
[ [0xEF, 0xBB, 0xBF],
|
||||
[0xFF, 0xFE],
|
||||
[0xFE, 0xFF],
|
||||
[0xFF, 0xFE, 0x00, 0x00],
|
||||
[0x00, 0x00, 0xFE, 0xFF]
|
||||
];
|
||||
|
||||
interface YStream {
|
||||
void writeExact(const void* buffer, size_t size);
|
||||
size_t write(const(ubyte)[] buffer);
|
||||
void flush();
|
||||
@property bool writeable();
|
||||
}
|
||||
|
||||
class YMemoryStream : YStream {
|
||||
|
@ -16,6 +43,10 @@ class YMemoryStream : YStream {
|
|||
data ~= buffer;
|
||||
return buffer.length;
|
||||
}
|
||||
|
||||
void flush() {}
|
||||
|
||||
@property bool writeable() { return true; }
|
||||
}
|
||||
|
||||
class YFile : YStream {
|
||||
|
@ -27,10 +58,17 @@ class YFile : YStream {
|
|||
}
|
||||
|
||||
void writeExact(const void* buffer, size_t size) {
|
||||
this.file.write(buffer[0 .. size]);
|
||||
this.file.write(cast(const ubyte[])buffer[0 .. size]);
|
||||
}
|
||||
|
||||
size_t write(const(ubyte)[] buffer) {
|
||||
this.file.write(buffer[0 .. size]);
|
||||
this.file.write(buffer);
|
||||
return buffer.length;
|
||||
}
|
||||
|
||||
void flush() {
|
||||
this.file.flush();
|
||||
}
|
||||
|
||||
@property bool writeable() { return true; }
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ import std.file;
|
|||
import std.range;
|
||||
import std.typecons;
|
||||
|
||||
import dyaml.stream;
|
||||
import dyaml.dumper;
|
||||
import dyaml.event;
|
||||
import dyaml.testcommon;
|
||||
|
|
|
@ -48,7 +48,9 @@ void testRepresenterTypes(bool verbose, string codeFilename)
|
|||
}
|
||||
}
|
||||
|
||||
auto emitStream = new MemoryStream;
|
||||
import dyaml.stream;
|
||||
|
||||
auto emitStream = new YMemoryStream;
|
||||
auto representer = new Representer;
|
||||
representer.addRepresenter!TestClass(&representClass);
|
||||
representer.addRepresenter!TestStruct(&representStruct);
|
||||
|
|
Loading…
Reference in a new issue