private object ReadValue(OseanBinary binary, OseanDataType type, OseanDataType arrayType) { return(type switch { OseanDataType.I8 => binary.ReadI8(), OseanDataType.I16 => binary.ReadI16(), OseanDataType.I32 => binary.ReadI32(), OseanDataType.I64 => binary.ReadI64(), OseanDataType.U8 => binary.ReadU8(), OseanDataType.U16 => binary.ReadU16(), OseanDataType.U32 => binary.ReadU32(), OseanDataType.U64 => binary.ReadU64(), OseanDataType.R32 => binary.ReadR32(), OseanDataType.R64 => binary.ReadR64(), OseanDataType.Boolean => binary.ReadU8() != 0, OseanDataType.String => binary.ReadString(), OseanDataType.WString => binary.ReadWString(), OseanDataType.Array => ((Func <Array>)(() => { var array = Array.CreateInstance(this.TypeFromDataType(arrayType), binary.ReadI32()); for (var i = 0; i < array.Length; ++i) { array.SetValue(this.ReadValue(binary, arrayType, OseanDataType.None), i); } return array; }))(), _ => throw new InvalidOperationException("cannot read invalid type code!") });
internal OseanPacketField(FieldInfo field, OseanDataType dataType) { this.Field = field; this.DataType = dataType; }