|
@@ -114,6 +114,27 @@ namespace Invercargill {
|
|
|
append(ate(chunk));
|
|
|
}
|
|
|
|
|
|
+ public int64? read_int64(int index) {
|
|
|
+ var data = skip(index).take((int)sizeof(int64)).to_array();
|
|
|
+ if(data.length != sizeof(int64))
|
|
|
+ return null;
|
|
|
+ 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 void push_all_int64(Enumerable<int64?> values) {
|
|
|
values.iterate(i => push_int64(i));
|
|
|
}
|
|
@@ -137,6 +158,28 @@ namespace Invercargill {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ public uint64? read_uint64(int index) {
|
|
|
+ var data = skip(index).take((int)sizeof(uint64)).to_array();
|
|
|
+ if(data.length != sizeof(uint64))
|
|
|
+ return null;
|
|
|
+ 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 void push_all_uint64(Enumerable<uint64?> values) {
|
|
|
values.iterate(i => push_uint64(i));
|
|
|
}
|
|
@@ -163,6 +206,28 @@ namespace Invercargill {
|
|
|
append(ate(chunk));
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ public int32? read_int32(int index) {
|
|
|
+ var data = skip(index).take((int)sizeof(int32)).to_array();
|
|
|
+ if(data.length != sizeof(int32))
|
|
|
+ return null;
|
|
|
+ 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 void push_all_int32(Enumerable<int32?> values) {
|
|
|
values.iterate(i => push_int32(i));
|
|
|
}
|
|
@@ -185,6 +250,28 @@ namespace Invercargill {
|
|
|
append(ate(chunk));
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ public uint32? read_uint32(int index) {
|
|
|
+ var data = skip(index).take((int)sizeof(uint32)).to_array();
|
|
|
+ if(data.length != sizeof(uint32))
|
|
|
+ return null;
|
|
|
+ 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 void push_all_uint32(Enumerable<uint32?> values) {
|
|
|
values.iterate(i => push_uint32(i));
|
|
|
}
|
|
@@ -207,6 +294,28 @@ namespace Invercargill {
|
|
|
append(ate(chunk));
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ public int16? read_int16(int index) {
|
|
|
+ var data = skip(index).take((int)sizeof(int16)).to_array();
|
|
|
+ if(data.length != sizeof(int16))
|
|
|
+ return null;
|
|
|
+ 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 void push_all_int16(Enumerable<int16?> values) {
|
|
|
values.iterate(i => push_int16(i));
|
|
|
}
|
|
@@ -229,6 +338,27 @@ namespace Invercargill {
|
|
|
append(ate(chunk));
|
|
|
}
|
|
|
|
|
|
+ public uint16? read_uint16(int index) {
|
|
|
+ var data = skip(index).take((int)sizeof(uint16)).to_array();
|
|
|
+ if(data.length != sizeof(uint16))
|
|
|
+ return null;
|
|
|
+ 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 void push_all_uint16(Enumerable<uint16?> values) {
|
|
|
values.iterate(i => push_uint16(i));
|
|
|
}
|
|
@@ -239,6 +369,16 @@ namespace Invercargill {
|
|
|
append(ate(chunk));
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ public int8? read_int8(int index) {
|
|
|
+ var data = skip(index).take((int)sizeof(int8)).to_array();
|
|
|
+ if(data.length != sizeof(int8))
|
|
|
+ return null;
|
|
|
+ int8 value = 0;
|
|
|
+ Memory.copy(&value, data, sizeof(int8));
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
public void push_all_int8(Enumerable<int8?> values) {
|
|
|
values.iterate(i => push_int8(i));
|
|
|
}
|
|
@@ -248,6 +388,15 @@ namespace Invercargill {
|
|
|
append(ate(chunk));
|
|
|
}
|
|
|
|
|
|
+ public uint8? read_uint8(int index) {
|
|
|
+ var data = skip(index).take((int)sizeof(uint8)).to_array();
|
|
|
+ if(data.length != sizeof(uint8))
|
|
|
+ return null;
|
|
|
+ uint8 value = 0;
|
|
|
+ Memory.copy(&value, data, sizeof(uint8));
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
public void push_all_uint8(Enumerable<uint8?> values) {
|
|
|
values.iterate(i => push_uint8(i));
|
|
|
}
|
|
@@ -281,6 +430,10 @@ namespace Invercargill {
|
|
|
return new BinaryData.from_enumerable(skip(start).take(end-start));
|
|
|
}
|
|
|
|
|
|
+ public BinaryData read(int start, int length) {
|
|
|
+ return new BinaryData.from_enumerable(skip(start).take(length));
|
|
|
+ }
|
|
|
+
|
|
|
public bool read_in(Bytes? data, ref size_t amount) throws Error {
|
|
|
if(amount <= 0) {
|
|
|
return false;
|