|
@@ -1,6 +1,9 @@
|
|
|
|
|
|
namespace Invercargill {
|
|
|
|
|
|
+ internal delegate T SafeReadFunc<T>(T[] array, int index);
|
|
|
+ internal delegate void SafeWriteFunc<T>(T[] array, int index, T value);
|
|
|
+
|
|
|
internal T safely_read_array<T> (T[] array, int index) {
|
|
|
var t = typeof (T);
|
|
|
if (t == typeof (bool)) {
|
|
@@ -81,4 +84,155 @@ namespace Invercargill {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ internal bool safely_read_bool_from_array(bool[] array, int index) {
|
|
|
+ return ((bool[])array)[index];
|
|
|
+ }
|
|
|
+ internal char safely_read_char_from_array(char[] array, int index) {
|
|
|
+ return ((char[])array)[index];
|
|
|
+ }
|
|
|
+ internal uchar safely_read_uchar_from_array(uchar[] array, int index) {
|
|
|
+ return ((uchar[])array)[index];
|
|
|
+ }
|
|
|
+ internal int safely_read_int_from_array(int[] array, int index) {
|
|
|
+ return ((int[])array)[index];
|
|
|
+ }
|
|
|
+ internal uint safely_read_uint_from_array(uint[] array, int index) {
|
|
|
+ return ((uint[])array)[index];
|
|
|
+ }
|
|
|
+ internal int64 safely_read_int64_from_array(int64[] array, int index) {
|
|
|
+ return ((int64[])array)[index];
|
|
|
+ }
|
|
|
+ internal uint64 safely_read_uint64_from_array(uint64[] array, int index) {
|
|
|
+ return ((uint64[])array)[index];
|
|
|
+ }
|
|
|
+ internal long safely_read_long_from_array(long[] array, int index) {
|
|
|
+ return ((long[])array)[index];
|
|
|
+ }
|
|
|
+ internal ulong safely_read_ulong_from_array(ulong[] array, int index) {
|
|
|
+ return ((ulong[])array)[index];
|
|
|
+ }
|
|
|
+ internal float safely_read_float_from_array(float[] array, int index) {
|
|
|
+ return ((float?[])array)[index];
|
|
|
+ }
|
|
|
+ internal double safely_read_double_from_array(double[] array, int index) {
|
|
|
+ return ((double?[])array)[index];
|
|
|
+ }
|
|
|
+ internal T read_from_array<T>(T[] array, int index) {
|
|
|
+ return array[index];
|
|
|
+ }
|
|
|
+
|
|
|
+ internal void safely_assign_bool_to_array(bool[] array, int index, bool value) {
|
|
|
+ ((bool[])array)[index] = (bool)value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_char_to_array(char[] array, int index, char value) {
|
|
|
+ ((char[])array)[index] = (char) value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_uchar_to_array(uchar[] array, int index, uchar value) {
|
|
|
+ ((uchar[])array)[index] = (uchar)value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_int_to_array(int[] array, int index, int value) {
|
|
|
+ ((int[])array)[index] = (int)value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_uint_to_array(uint[] array, int index, uint value) {
|
|
|
+ ((uint[])array)[index] = (uint)value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_int64_to_array(int64[] array, int index, int64 value) {
|
|
|
+ ((int64[])array)[index] = (int64)value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_uint64_to_array(uint64[] array, int index, uint64 value) {
|
|
|
+ ((uint64[])array)[index] = (uint64)value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_long_to_array(long[] array, int index, long value) {
|
|
|
+ ((long[])array)[index] = (long)value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_ulong_to_array(ulong[] array, int index, ulong value) {
|
|
|
+ ((ulong[])array)[index] = (ulong)value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_float_to_array(float[] array, int index, float value) {
|
|
|
+ ((float?[])array)[index] = (float?)value;
|
|
|
+ }
|
|
|
+ internal void safely_assign_double_to_array(double[] array, int index, double value) {
|
|
|
+ ((double?[])array)[index] = (double?)value;
|
|
|
+ }
|
|
|
+ internal void assign_to_array<T>(T[] array, int index, T value) {
|
|
|
+ array[index] = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ internal SafeReadFunc<T> get_safe_read_function_for<T>() {
|
|
|
+ var t = typeof (T);
|
|
|
+ if (t == typeof (bool)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_bool_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (char)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_char_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (uchar)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_uchar_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (int) || t.is_enum () || t.is_flags ()) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_int_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (uint)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_uint_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (int64)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_int64_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (uint64)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_uint64_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (long)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_long_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (ulong)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_ulong_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (float)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_float_from_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (double)) {
|
|
|
+ return (SafeReadFunc<T>)safely_read_double_from_array;
|
|
|
+ }
|
|
|
+ return (SafeReadFunc<T>)read_from_array<T>;
|
|
|
+ }
|
|
|
+
|
|
|
+ internal SafeWriteFunc<T> get_safe_write_function_for<T>() {
|
|
|
+ var t = typeof (T);
|
|
|
+ if (t == typeof (bool)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_bool_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (char)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_char_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (uchar)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_uchar_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (int) || t.is_enum () || t.is_flags ()) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_int_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (uint)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_uint_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (int64)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_int64_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (uint64)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_uint64_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (long)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_long_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (ulong)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_ulong_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (float)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_float_to_array;
|
|
|
+ }
|
|
|
+ else if (t == typeof (double)) {
|
|
|
+ return (SafeWriteFunc<T>)safely_assign_double_to_array;
|
|
|
+ }
|
|
|
+ return (SafeWriteFunc<T>)assign_to_array<T>;
|
|
|
+ }
|
|
|
+
|
|
|
}
|