123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- namespace Invercargill {
- public enum Endianness {
- Native,
- BigEndian,
- LittleEndian,
- }
- [GenericAccessors]
- public interface ReadOnlyAddressableBytes : ReadOnlyAddressable<uint8>, Equatable<Enumerable<uint8>>, BinaryData, Hashable {
- public virtual int64? get_int64(int index, Endianness endianness = Endianness.Native) throws IndexError {
- var data = get_slice(index, sizeof(int64));
- int64 value = 0;
- int64 val = 0;
- Memory.copy(&value, data, sizeof(int64));
- 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;
- }
- return val;
- }
- public virtual uint64? get_uint64(int index, Endianness endianness = Endianness.Native) throws IndexError {
- var data = get_slice(index, sizeof(uint64));
- uint64 value = 0;
- uint64 val = 0;
- Memory.copy(&value, data, sizeof(uint64));
- 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;
- }
- return val;
- }
- public virtual int32? get_int32(int index, Endianness endianness = Endianness.Native) throws IndexError {
- var data = get_slice(index, sizeof(int32));
- int32 value = 0;
- int32 val = 0;
- Memory.copy(&value, data, sizeof(int32));
- 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;
- }
- return val;
- }
- public virtual uint32? get_uint32(int index, Endianness endianness = Endianness.Native) throws IndexError {
- var data = get_slice(index, sizeof(uint32));
- uint32 value = 0;
- uint32 val = 0;
- Memory.copy(&value, data, sizeof(uint32));
- 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;
- }
- return val;
- }
- public virtual int16? get_int16(int index, Endianness endianness = Endianness.Native) throws IndexError {
- var data = get_slice(index, sizeof(int16));
- int16 value = 0;
- int16 val = 0;
- Memory.copy(&value, data, sizeof(int16));
- 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;
- }
- return val;
- }
- public virtual uint16? get_uint16(int index, Endianness endianness = Endianness.Native) throws IndexError {
- var data = get_slice(index, sizeof(uint16));
- uint16 value = 0;
- uint16 val = 0;
- Memory.copy(&value, data, sizeof(uint16));
- 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;
- }
- return val;
- }
- public virtual int8? get_int8(int index) throws IndexError {
- var data = get_slice(index, sizeof(int8));
- int8 value = 0;
- Memory.copy(&value, data, sizeof(int8));
- return value;
- }
- public virtual uint8? get_uint8(int index) throws IndexError {
- var data = get_slice(index, sizeof(uint8));
- uint8 value = 0;
- Memory.copy(&value, data, sizeof(uint8));
- return value;
- }
- private uint8[] get_slice(uint index, ulong size) throws IndexError {
- var slice = new uint8[size];
- for(int i = 0; i < size; i++) {
- slice[i] = this[i + index];
- }
- return slice;
- }
- }
- }
|