/// <summary> /// Parses a decimal from a protobuf stream /// </summary> public static decimal ReadDecimal(ProtoReader reader, ref ProtoReader.State state) { ulong low = 0; uint high = 0; uint signScale = 0; int fieldNumber; SubItemToken token = ProtoReader.StartSubItem(reader, ref state); while ((fieldNumber = reader.ReadFieldHeader(ref state)) > 0) { switch (fieldNumber) { case FieldDecimalLow: low = reader.ReadUInt64(ref state); break; case FieldDecimalHigh: high = reader.ReadUInt32(ref state); break; case FieldDecimalSignScale: signScale = reader.ReadUInt32(ref state); break; default: reader.SkipField(ref state); break; } } ProtoReader.EndSubItem(token, reader, ref state); int lo = (int)(low & 0xFFFFFFFFL), mid = (int)((low >> 32) & 0xFFFFFFFFL), hi = (int)high; bool isNeg = (signScale & 0x0001) == 0x0001; byte scale = (byte)((signScale & 0x01FE) >> 1); return(new decimal(lo, mid, hi, isNeg, scale)); }
public static decimal ReadDecimal(ProtoReader reader) { ulong num = (ulong)0; uint num1 = 0; uint num2 = 0; SubItemToken subItemToken = ProtoReader.StartSubItem(reader); while (true) { int num3 = reader.ReadFieldHeader(); int num4 = num3; if (num3 <= 0) { break; } switch (num4) { case 1: { num = reader.ReadUInt64(); continue; } case 2: { num1 = reader.ReadUInt32(); continue; } case 3: { num2 = reader.ReadUInt32(); continue; } default: { reader.SkipField(); continue; } } } ProtoReader.EndSubItem(subItemToken, reader); if (num == (long)0 && num1 == 0) { return(new decimal(0)); } int num5 = (int)(num & (ulong)-1); int num6 = (int)(num >> 32 & (ulong)-1); int num7 = (int)num1; bool flag = (num2 & 1) == 1; byte num8 = (byte)((num2 & 510) >> 1); return(new decimal(num5, num6, num7, flag, num8)); }
public static decimal ReadDecimal(ProtoReader reader) { ulong num = 0uL; uint num2 = 0u; uint num3 = 0u; SubItemToken token = ProtoReader.StartSubItem(reader); int num4; while ((num4 = reader.ReadFieldHeader()) > 0) { switch (num4) { case 1: num = reader.ReadUInt64(); break; case 2: num2 = reader.ReadUInt32(); break; case 3: num3 = reader.ReadUInt32(); break; default: reader.SkipField(); break; } } ProtoReader.EndSubItem(token, reader); if (num == 0L && num2 == 0) { return(0m); } int lo = (int)(num & uint.MaxValue); int mid = (int)((num >> 32) & uint.MaxValue); int hi = (int)num2; bool isNegative = (num3 & 1) == 1; byte scale = (byte)((num3 & 0x1FE) >> 1); return(new decimal(lo, mid, hi, isNegative, scale)); }
public static decimal ReadDecimal(ProtoReader reader) { ulong num = 0uL; uint num2 = 0u; uint num3 = 0u; SubItemToken token = ProtoReader.StartSubItem(reader); int num4; while ((num4 = reader.ReadFieldHeader()) > 0) { switch (num4) { case 1: num = reader.ReadUInt64(); break; case 2: num2 = reader.ReadUInt32(); break; case 3: num3 = reader.ReadUInt32(); break; default: reader.SkipField(); break; } } ProtoReader.EndSubItem(token, reader); if (num == 0uL && num2 == 0u) { return(0m); } int num5 = (int)(num & (ulong)-1); int num6 = (int)(num >> 32 & (ulong)-1); int num7 = (int)num2; bool flag = (num3 & 1u) == 1u; byte b = (byte)((num3 & 510u) >> 1); return(new decimal(num5, num6, num7, flag, b)); }
static public int ReadUInt32(IntPtr l) { try { ProtoBuf.ProtoReader self = (ProtoBuf.ProtoReader)checkSelf(l); var ret = self.ReadUInt32(); pushValue(l, true); pushValue(l, ret); return(2); } catch (Exception e) { return(error(l, e)); } }
public static decimal ReadDecimal(ProtoReader reader) { ulong num = 0uL; uint num2 = 0u; uint num3 = 0u; SubItemToken token = ProtoReader.StartSubItem(reader); int num4; while ((num4 = reader.ReadFieldHeader()) > 0) { switch (num4) { case 1: num = reader.ReadUInt64(); break; case 2: num2 = reader.ReadUInt32(); break; case 3: num3 = reader.ReadUInt32(); break; default: reader.SkipField(); break; } } ProtoReader.EndSubItem(token, reader); if (num == 0uL && num2 == 0u) { return 0m; } int lo = (int)(num & 0xFFFFFFFFL); int mid = (int)(num >> 32 & 0xFFFFFFFFL); int hi = (int)num2; bool isNegative = (num3 & 1u) == 1u; byte scale = (byte)((num3 & 510u) >> 1); return new decimal(lo, mid, hi, isNegative, scale); }
/// <summary> /// Parses a decimal from a protobuf stream /// </summary> public static decimal ReadDecimal(ProtoReader reader) { ulong low = 0; uint high = 0; uint signScale = 0; int fieldNumber; SubItemToken token = ProtoReader.StartSubItem(reader); while ((fieldNumber = reader.ReadFieldHeader()) > 0) { switch (fieldNumber) { case FieldDecimalLow: low = reader.ReadUInt64(); break; case FieldDecimalHigh: high = reader.ReadUInt32(); break; case FieldDecimalSignScale: signScale = reader.ReadUInt32(); break; default: reader.SkipField(); break; } } ProtoReader.EndSubItem(token, reader); if (low == 0 && high == 0) return decimal.Zero; int lo = (int)(low & 0xFFFFFFFFL), mid = (int)((low >> 32) & 0xFFFFFFFFL), hi = (int)high; bool isNeg = (signScale & 0x0001) == 0x0001; byte scale = (byte)((signScale & 0x01FE) >> 1); return new decimal(lo, mid, hi, isNeg, scale); }
object ReadField(ProtoReader reader, Type memberT, string sClassName, CLS_Environment environment) { if (memberT == typeof(int)) { return reader.ReadInt32(); } else if (memberT == typeof(uint)) { return reader.ReadUInt32(); } else if (memberT == typeof(bool)) { return reader.ReadBoolean(); } else if (memberT == typeof(byte)) { return reader.ReadByte(); } else if (memberT == typeof(sbyte)) { return reader.ReadSByte(); } else if (memberT == typeof(float)) { return reader.ReadSingle(); } else if (memberT == typeof(double)) { return reader.ReadDouble(); } else if (memberT == typeof(short)) { return reader.ReadInt16(); } else if (memberT == typeof(ushort)) { return reader.ReadUInt16(); } else if (memberT == typeof(long)) { return reader.ReadInt64(); } else if (memberT == typeof(ulong)) { return reader.ReadUInt64(); } else if (memberT == typeof(string)) { return reader.ReadString(); } else if (memberT == typeof(byte[])) { return ProtoReader.AppendBytes(null, reader); } else if (memberT == typeof(SInstance)) { SubItemToken st = ProtoReader.StartSubItem(reader); CLS_Type_Class sClass = environment.GetTypeByKeywordQuiet(sClassName) as CLS_Type_Class; if (!sClass.compiled) RuntimeCompilerClass(sClassName); CLS_Content content = CLS_Content.NewContent(environment); CLS_Content.Value retVal = sClass.function.New(content, m_emptyParams); CLS_Content.PoolContent(content); SInstance sInstance = (SInstance)retVal.value; ReadSInstance(reader, sInstance, environment); ProtoReader.EndSubItem(st, reader); return sInstance; } else { throw new NotImplementedException("未实现类型: " + memberT); } }
/// <summary> /// The read. /// </summary> /// <param name="mxMessage"> /// The mx message. /// </param> /// <param name="protoReader"> /// The proto reader. /// </param> /// <returns> /// The <see cref="MxMessage"/>. /// </returns> private static MxMessage Read(MxMessage mxMessage, ProtoReader protoReader) { int num; while ((num = protoReader.ReadFieldHeader()) > 0) { if (num != 1) { if (num != 2) { if (num != 3) { if (num != 4) { if (num != 6) { if (mxMessage == null) { var expr_170 = new MxMessage(); ProtoReader.NoteObject(expr_170, protoReader); mxMessage = expr_170; } protoReader.SkipField(); } else { if (mxMessage == null) { var expr_D9 = new MxMessage(); ProtoReader.NoteObject(expr_D9, protoReader); mxMessage = expr_D9; } MxPayload[] payloads = mxMessage.Payloads; var list = new List<MxPayload>(); int num2 = protoReader.FieldNumber; do { List<MxPayload> arg_111_0 = list; MxPayload arg_104_0 = null; SubItemToken token = ProtoReader.StartSubItem(protoReader); MxPayload arg_111_1 = Read(arg_104_0, protoReader); ProtoReader.EndSubItem(token, protoReader); arg_111_0.Add(arg_111_1); } while (protoReader.TryReadFieldHeader(num2)); MxPayload[] expr_124 = payloads; var array = new MxPayload[(num2 = (expr_124 != null) ? expr_124.Length : 0) + list.Count]; if (num2 != 0) { payloads.CopyTo(array, 0); } list.CopyTo(array, num2); array = array; if (array != null) { mxMessage.Payloads = array; } } } else { if (mxMessage == null) { var expr_A9 = new MxMessage(); ProtoReader.NoteObject(expr_A9, protoReader); mxMessage = expr_A9; } uint num3 = protoReader.ReadUInt32(); mxMessage.AckBitfield = num3; } } else { if (mxMessage == null) { var expr_79 = new MxMessage(); ProtoReader.NoteObject(expr_79, protoReader); mxMessage = expr_79; } uint num3 = protoReader.ReadUInt32(); mxMessage.Ack = num3; } } else { if (mxMessage == null) { var expr_49 = new MxMessage(); ProtoReader.NoteObject(expr_49, protoReader); mxMessage = expr_49; } uint num3 = protoReader.ReadUInt32(); mxMessage.Sequence = num3; } } else { if (mxMessage == null) { var expr_19 = new MxMessage(); ProtoReader.NoteObject(expr_19, protoReader); mxMessage = expr_19; } uint num3 = protoReader.ReadUInt32(); mxMessage.ProtocolID = num3; } } if (mxMessage == null) { var expr_198 = new MxMessage(); ProtoReader.NoteObject(expr_198, protoReader); mxMessage = expr_198; } return mxMessage; }