module utils.misc;

import
		std.traits;


mixin template publicProperty(T, string name, string value = null)
{
	mixin(`
		public ref ` ~ name ~ `() @property const { return _` ~ name ~ `; }
		T _` ~ name ~ (value.length ? `=` ~ value : null) ~ `;`
																);
}

auto as(T, E)(E data) if(isDynamicArray!E)
{
	return cast(T[])data;
}

auto as(T, E)(ref E data) if(!isDynamicArray!E)
{
	return cast(T[])(&data)[0..1];
}

auto toByte(T)(auto ref T data)
{
	return data.as!ubyte;
}