Пример #1
0
        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!")
            });
Пример #2
0
 internal OseanPacketField(FieldInfo field, OseanDataType dataType)
 {
     this.Field    = field;
     this.DataType = dataType;
 }