Typed

Extension template for a buffer that provides methods and properties useful for working with a single type of data.

  1. class Typed(T, B : Buffer = Buffer)
  2. template Typed(T, B : Buffer = Buffer)
    template Typed (
    T
    B : Buffer = Buffer
    ) if (
    isArray!T &&
    canSwapEndianness!(ForeachType!T)
    ) {}

Members

Aliases

Typed
alias Typed = Typed!(ForeachType!T, B)
Undocumented in source.

Examples

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'])

Meta