Reads a value of type T or an array of type T[].
Writes a value of type T or array of type T[].
Gets the data as an array of the template's type. The data can also be obtained in the specified format.
t { import std.range; alias ByteBuffer = Typed!ubyte; static assert(isOutputRange!(ByteBuffer, ubyte)); auto buffer = new ByteBuffer([0, 0, 0, 4]); assert(buffer.read!(Endian.bigEndian, uint)() == 4); buffer.reset(); buffer.put(1); buffer.put([2, 3]); buffer.put(4, 5, 6); assert(buffer.data == [1, 2, 3, 4, 5, 6]); assert(buffer.get == 1); assert(buffer.get(3) == [2, 3, 4]);
t { alias IntBuffer = Typed!int; auto buffer = new IntBuffer(2); assert(buffer.capacity == 8); buffer.write(1); buffer.write(2); version(BigEndian) assert(buffer.data!ubyte == [0, 0, 0, 1, 0, 0, 0, 2]); version(LittleEndian) assert(buffer.data!ubyte == [1, 0, 0, 0, 2, 0, 0, 0]); assert(buffer.read!int() == 1); assert(buffer.read!int() == 2);
t { static struct Test { int a; short b; } static assert(Test.sizeof == 8); // because of the alignment alias TestBuffer = Typed!Test; auto buffer = new TestBuffer(1); buffer.put(Test(1, 2)); version(BigEndian) assert(buffer.data!ubyte == [0, 0, 0, 1, 0, 2, 0, 0]); version(LittleEndian) assert(buffer.data!ubyte == [1, 0, 0, 0, 2, 0, 0, 0]); assert(buffer.data == [Test(1, 2)]); assert(buffer.get == Test(1, 2)); buffer.reset(); buffer.write!(cast(Endian)!endian)(Test(1, 2)); version(BigEndian) assert(buffer.data!ubyte == [0, 0, 2, 0, 1, 0, 0, 0]); version(LittleEndian) assert(buffer.data!ubyte == [0, 0, 0, 2, 0, 0, 0, 1]);
t { static struct Test { int a; ubyte[] b; } static assert(!canSwapEndianness!Test);
t { alias StringBuffer = Typed!string; static assert(is(StringBuffer == Typed!(immutable(char)))); auto buffer = new StringBuffer(64); buffer.put("hello"); assert(buffer.data!char == ['h', 'e', 'l', 'l', 'o'])
Extension template for a buffer that provides methods and properties useful for working with a single type of data.