in modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReflectiveActions.cs [272:445]
private static void HandleArray(FieldInfo field, out BinaryReflectiveWriteAction writeAction,
out BinaryReflectiveReadAction readAction, bool raw)
{
if (field.FieldType.GetArrayRank() > 1)
{
writeAction = raw
? GetRawWriter<Array>(field, (w, o) => w.WriteObject(
o == null ? null : new MultidimensionalArrayHolder(o)))
: GetWriter<Array>(field, (f, w, o) => w.WriteObject(f,
o == null ? null : new MultidimensionalArrayHolder(o)));
readAction = raw
? GetRawReader(field, r => r.ReadObject<object>())
: GetReader(field, (f, r) => r.ReadObject<object>(f));
return;
}
var elemType = field.FieldType.GetElementType();
Debug.Assert(elemType != null);
if (elemType == typeof (bool))
{
writeAction = raw
? GetRawWriter<bool[]>(field, (w, o) => w.WriteBooleanArray(o))
: GetWriter<bool[]>(field, (f, w, o) => w.WriteBooleanArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadBooleanArray())
: GetReader(field, (f, r) => r.ReadBooleanArray(f));
}
else if (elemType == typeof (byte))
{
writeAction = raw
? GetRawWriter<byte[]>(field, (w, o) => w.WriteByteArray(o))
: GetWriter<byte[]>(field, (f, w, o) => w.WriteByteArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadByteArray())
: GetReader(field, (f, r) => r.ReadByteArray(f));
}
else if (elemType == typeof (sbyte))
{
writeAction = raw
? GetRawWriter<sbyte[]>(field, (w, o) => w.WriteByteArray((byte[]) (Array) o))
: GetWriter<sbyte[]>(field, (f, w, o) => w.WriteByteArray(f, (byte[]) (Array) o));
readAction = raw
? GetRawReader(field, r => (sbyte[]) (Array) r.ReadByteArray())
: GetReader(field, (f, r) => (sbyte[]) (Array) r.ReadByteArray(f));
}
else if (elemType == typeof (short))
{
writeAction = raw
? GetRawWriter<short[]>(field, (w, o) => w.WriteShortArray(o))
: GetWriter<short[]>(field, (f, w, o) => w.WriteShortArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadShortArray())
: GetReader(field, (f, r) => r.ReadShortArray(f));
}
else if (elemType == typeof (ushort))
{
writeAction = raw
? GetRawWriter<ushort[]>(field, (w, o) => w.WriteShortArray((short[]) (Array) o))
: GetWriter<ushort[]>(field, (f, w, o) => w.WriteShortArray(f, (short[]) (Array) o));
readAction = raw
? GetRawReader(field, r => (ushort[]) (Array) r.ReadShortArray())
: GetReader(field, (f, r) => (ushort[]) (Array) r.ReadShortArray(f));
}
else if (elemType == typeof (char))
{
writeAction = raw
? GetRawWriter<char[]>(field, (w, o) => w.WriteCharArray(o))
: GetWriter<char[]>(field, (f, w, o) => w.WriteCharArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadCharArray())
: GetReader(field, (f, r) => r.ReadCharArray(f));
}
else if (elemType == typeof (int))
{
writeAction = raw
? GetRawWriter<int[]>(field, (w, o) => w.WriteIntArray(o))
: GetWriter<int[]>(field, (f, w, o) => w.WriteIntArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadIntArray())
: GetReader(field, (f, r) => r.ReadIntArray(f));
}
else if (elemType == typeof (uint))
{
writeAction = raw
? GetRawWriter<uint[]>(field, (w, o) => w.WriteIntArray((int[]) (Array) o))
: GetWriter<uint[]>(field, (f, w, o) => w.WriteIntArray(f, (int[]) (Array) o));
readAction = raw
? GetRawReader(field, r => (uint[]) (Array) r.ReadIntArray())
: GetReader(field, (f, r) => (uint[]) (Array) r.ReadIntArray(f));
}
else if (elemType == typeof (long))
{
writeAction = raw
? GetRawWriter<long[]>(field, (w, o) => w.WriteLongArray(o))
: GetWriter<long[]>(field, (f, w, o) => w.WriteLongArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadLongArray())
: GetReader(field, (f, r) => r.ReadLongArray(f));
}
else if (elemType == typeof (ulong))
{
writeAction = raw
? GetRawWriter<ulong[]>(field, (w, o) => w.WriteLongArray((long[]) (Array) o))
: GetWriter<ulong[]>(field, (f, w, o) => w.WriteLongArray(f, (long[]) (Array) o));
readAction = raw
? GetRawReader(field, r => (ulong[]) (Array) r.ReadLongArray())
: GetReader(field, (f, r) => (ulong[]) (Array) r.ReadLongArray(f));
}
else if (elemType == typeof (float))
{
writeAction = raw
? GetRawWriter<float[]>(field, (w, o) => w.WriteFloatArray(o))
: GetWriter<float[]>(field, (f, w, o) => w.WriteFloatArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadFloatArray())
: GetReader(field, (f, r) => r.ReadFloatArray(f));
}
else if (elemType == typeof (double))
{
writeAction = raw
? GetRawWriter<double[]>(field, (w, o) => w.WriteDoubleArray(o))
: GetWriter<double[]>(field, (f, w, o) => w.WriteDoubleArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadDoubleArray())
: GetReader(field, (f, r) => r.ReadDoubleArray(f));
}
else if (elemType == typeof (decimal?))
{
writeAction = raw
? GetRawWriter<decimal?[]>(field, (w, o) => w.WriteDecimalArray(o))
: GetWriter<decimal?[]>(field, (f, w, o) => w.WriteDecimalArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadDecimalArray())
: GetReader(field, (f, r) => r.ReadDecimalArray(f));
}
else if (elemType == typeof (string))
{
writeAction = raw
? GetRawWriter<string[]>(field, (w, o) => w.WriteStringArray(o))
: GetWriter<string[]>(field, (f, w, o) => w.WriteStringArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadStringArray())
: GetReader(field, (f, r) => r.ReadStringArray(f));
}
else if (elemType == typeof (Guid?))
{
writeAction = raw
? GetRawWriter<Guid?[]>(field, (w, o) => w.WriteGuidArray(o))
: GetWriter<Guid?[]>(field, (f, w, o) => w.WriteGuidArray(f, o));
readAction = raw
? GetRawReader(field, r => r.ReadGuidArray())
: GetReader(field, (f, r) => r.ReadGuidArray(f));
}
else if (elemType.IsEnum)
{
writeAction = raw
? GetRawWriter(field, MthdWriteEnumArrayRaw, elemType)
: GetWriter(field, MthdWriteEnumArray, elemType);
readAction = raw
? GetRawReader(field, MthdReadEnumArrayRaw, elemType)
: GetReader(field, MthdReadEnumArray, elemType);
}
else
{
writeAction = raw
? GetRawWriter(field, MthdWriteObjArrayRaw, elemType)
: GetWriter(field, MthdWriteObjArray, elemType);
readAction = raw
? GetRawReader(field, MthdReadObjArrayRaw, elemType)
: GetReader(field, MthdReadObjArray, elemType);
}
}