namespace Invercargill.DataStructures { public class ByteBuffer : Buffer, Hashable, Sticky, BinaryData, ReadOnlyAddressableBytes, AddressableBytes { public ByteBuffer(uint size) { base(size); } public uint hash_code() { return aggregate(5381, (h, b) => h * 33 + b); } protected BinaryData adhere(Enumerable enumerable) { return enumerable.assert_promotion(); } public ByteBuffer.from_enumerable(Enumerable data) { base.take_array(data.to_array()); } public ByteBuffer.from_bytes(Bytes data) { base.take_array(data.get_data()); } public ByteBuffer.from_byte_array(uint8[] data) { base.take_array(data); } public ByteBuffer.from_base64(string data) { base.take_array(Base64.decode(data)); } public ByteBuffer.from_hex(string data) { var groomed = data.replace(" ", "").replace("-", "").replace(":", "").replace("0x", ""); base(groomed.length/2); for(var i = 0; i < groomed.length/2; i++) { non_error(() => this[i] = (uint8)uint.parse(groomed[i*2:(i+1)*2], 16)); } } } }