namespace Invercargill { [GenericAccessors] public interface AddressableBytes : Addressable, ReadOnlyAddressableBytes { public virtual void set_int64(uint index, int64 value, Endianness endianness) throws IndexError { var chunk = new uint8[sizeof(int64)]; int64 val; switch (endianness) { case Endianness.Native: val = value; break; case Endianness.BigEndian: val = value.to_big_endian(); break; case Endianness.LittleEndian: val = value.to_little_endian(); break; } Memory.copy(chunk, &val, sizeof(int64)); set_data(index, chunk); } public virtual void set_all_int64(uint index, Enumerable values, Endianness endianness) throws IndexError { foreach(var value in values) { set_int64(index, value, endianness); } } public virtual void set_uint64(uint index, uint64 value, Endianness endianness) throws IndexError { var chunk = new uint8[sizeof(uint64)]; uint64 val; switch (endianness) { case Endianness.Native: val = value; break; case Endianness.BigEndian: val = value.to_big_endian(); break; case Endianness.LittleEndian: val = value.to_little_endian(); break; } Memory.copy(chunk, &val, sizeof(uint64)); set_data(index, chunk); } public virtual void set_all_uint64(uint index, Enumerable values, Endianness endianness) throws IndexError { foreach(var value in values) { set_uint64(index, value, endianness); } } public virtual void set_int32(uint index, int32 value, Endianness endianness) throws IndexError { var chunk = new uint8[sizeof(int32)]; int32 val; switch (endianness) { case Endianness.Native: val = value; break; case Endianness.BigEndian: val = value.to_big_endian(); break; case Endianness.LittleEndian: val = value.to_little_endian(); break; } Memory.copy(chunk, &val, sizeof(int32)); set_data(index, chunk); } public virtual void set_all_int32(uint index, Enumerable values, Endianness endianness) throws IndexError { foreach(var value in values) { set_int32(index, value, endianness); } } public virtual void set_uint32(uint index, uint32 value, Endianness endianness) throws IndexError { var chunk = new uint8[sizeof(uint32)]; uint32 val; switch (endianness) { case Endianness.Native: val = value; break; case Endianness.BigEndian: val = value.to_big_endian(); break; case Endianness.LittleEndian: val = value.to_little_endian(); break; } Memory.copy(chunk, &val, sizeof(uint32)); set_data(index, chunk); } public virtual void set_all_uint32(uint index, Enumerable values, Endianness endianness) throws IndexError { foreach(var value in values) { set_uint32(index, value, endianness); } } public virtual void set_int16(uint index, int16 value, Endianness endianness) throws IndexError { var chunk = new uint8[sizeof(int16)]; int16 val; switch (endianness) { case Endianness.Native: val = value; break; case Endianness.BigEndian: val = value.to_big_endian(); break; case Endianness.LittleEndian: val = value.to_little_endian(); break; } Memory.copy(chunk, &val, sizeof(int16)); set_data(index, chunk); } public virtual void set_all_int16(uint index, Enumerable values, Endianness endianness) throws IndexError { foreach(var value in values) { set_int16(index, value, endianness); } } public virtual void set_uint16(uint index, uint16 value, Endianness endianness) throws IndexError { var chunk = new uint8[sizeof(uint16)]; uint16 val; switch (endianness) { case Endianness.Native: val = value; break; case Endianness.BigEndian: val = value.to_big_endian(); break; case Endianness.LittleEndian: val = value.to_little_endian(); break; } Memory.copy(chunk, &val, sizeof(uint16)); set_data(index, chunk); } public virtual void set_all_uint16(uint index, Enumerable values, Endianness endianness) throws IndexError { foreach(var value in values) { set_uint16(index, value, endianness); } } public virtual void set_int8(uint index, int8 value, Endianness endianness) throws IndexError { var chunk = new uint8[sizeof(int8)]; Memory.copy(chunk, &value, sizeof(int8)); set_data(index, chunk); } public virtual void set_all_int8(uint index, Enumerable values, Endianness endianness) throws IndexError { foreach(var value in values) { set_int8(index, value, endianness); } } public virtual void set_uint8(uint index, uint8 value, Endianness endianness) throws IndexError { var chunk = new uint8[] { value }; set_data(index, chunk); } public virtual void set_all_uint8(uint index, Enumerable values, Endianness endianness) throws IndexError { foreach(var value in values) { set_uint8(index, value, endianness); } } private void set_data(uint index, uint8[] data) throws IndexError { for(int i = 0; i < data.length; i++) { this[i + index] = data[i]; } } } }