void ReadSInstance(ProtoReader reader, SInstance sInstance, CLS_Environment environment) { List <CLS_Content.Value> values; List <string> keywords; GetSortMembers(sInstance, out values, out keywords); int fieldNumber = 0; while ((fieldNumber = reader.ReadFieldHeader()) > 0) { Type memberT = values[fieldNumber - 1].type; CLS_Content.Value memberV = values[fieldNumber - 1]; string sClassName = keywords[fieldNumber - 1]; if (memberT == null) { memberT = typeof(SInstance); sClassName = ((SType)memberV.type).Name; } Type itemType = GetItemType(memberT); if (itemType != null) { sClassName = sInstance.type.members[sClassName].type.keyword; // 数组判断 if (memberT.IsArray) { string itemClass = sClassName.Substring(0, sClassName.Length - 2); // 从 xxx[] 中提取xxx BasicList list = new BasicList(); do { list.Add(ReadField(reader, itemType, itemClass, environment)); } while (reader.TryReadFieldHeader(fieldNumber)); Array result = Array.CreateInstance(itemType, list.Count); list.CopyTo(result, 0); memberV.value = result; } // 列表判断 else { string itemClass = sClassName.Substring(5, sClassName.Length - 6); // 从 List<xxx> 中提取xxx ICLS_Type iType = environment.GetTypeByKeywordQuiet(sClassName); CLS_Content content = CLS_Content.NewContent(environment); memberV.value = iType.function.New(content, m_emptyParams).value; CLS_Content.PoolContent(content); IList list = (IList)memberV.value; do { list.Add(ReadField(reader, itemType, itemClass, environment)); } while (reader.TryReadFieldHeader(fieldNumber)); } } else { memberV.value = ReadField(reader, memberT, sClassName, environment); } } }
public override object Read(object value, ProtoReader source) { int field = source.FieldNumber; object origValue = value; if (value == null) { value = ProtobufTypeHelper.CreateInstance(concreteType); } bool isList = IsList && !SuppressIList; if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); if (isList) { IList list = (IList)value; while (ProtoReader.HasSubValue(packedWireType, source)) { list.Add(Tail.Read(null, source)); } } else { object[] args = new object[1]; while (ProtoReader.HasSubValue(packedWireType, source)) { args[0] = Tail.Read(null, source); add.Invoke(value, args); } } ProtoReader.EndSubItem(token, source); } else { if (isList) { IList list = (IList)value; do { object item = Tail.Read(null, source); item = ProtobufTypeHelper.ConvertCLRInstance(item); list.Add(item); } while (source.TryReadFieldHeader(field)); } else { object[] args = new object[1]; do { args[0] = Tail.Read(null, source); add.Invoke(value, args); } while (source.TryReadFieldHeader(field)); } } return(origValue == value ? null : value); }
public override object Read(object value, ProtoReader source) { int fieldNumber = source.FieldNumber; object obj2 = value; if (value == null) { value = Activator.CreateInstance(this.concreteType); } bool flag = this.IsList && !this.SuppressIList; if ((this.packedWireType != WireType.None) && (source.WireType == WireType.String)) { SubItemToken token = ProtoReader.StartSubItem(source); if (flag) { IList list = (IList)value; while (ProtoReader.HasSubValue(this.packedWireType, source)) { list.Add(base.Tail.Read(null, source)); } } else { object[] parameters = new object[1]; while (ProtoReader.HasSubValue(this.packedWireType, source)) { parameters[0] = base.Tail.Read(null, source); this.add.Invoke(value, parameters); } } ProtoReader.EndSubItem(token, source); } else if (flag) { IList list2 = (IList)value; do { list2.Add(base.Tail.Read(null, source)); }while (source.TryReadFieldHeader(fieldNumber)); } else { object[] objArray2 = new object[1]; do { objArray2[0] = base.Tail.Read(null, source); this.add.Invoke(value, objArray2); }while (source.TryReadFieldHeader(fieldNumber)); } if (obj2 != value) { return(value); } return(null); }
public override object Read(object value, ProtoReader source) { int fieldNumber = source.FieldNumber; object obj = value; if (value == null) { value = Activator.CreateInstance(this.concreteType); } bool flag = (!this.IsList ? false : !this.SuppressIList); if (this.packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken subItemToken = ProtoReader.StartSubItem(source); if (!flag) { object[] objArray = new object[1]; while (ProtoReader.HasSubValue(this.packedWireType, source)) { objArray[0] = this.Tail.Read(null, source); [email protected](value, objArray); } } else { IList lists = (IList)value; while (ProtoReader.HasSubValue(this.packedWireType, source)) { lists.Add(this.Tail.Read(null, source)); } } ProtoReader.EndSubItem(subItemToken, source); } else if (!flag) { object[] objArray1 = new object[1]; do { objArray1[0] = this.Tail.Read(null, source); [email protected](value, objArray1); }while (source.TryReadFieldHeader(fieldNumber)); } else { IList lists1 = (IList)value; do { lists1.Add(this.Tail.Read(null, source)); }while (source.TryReadFieldHeader(fieldNumber)); } if (obj != value) { return(value); } return(null); }
public override object Read(object value, ProtoReader source) { int field = source.FieldNumber; object obj = value; if (value == null) { value = Activator.CreateInstance(concreteType); } bool flag = IsList && !SuppressIList; if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); if (flag) { IList list = (IList)value; while (ProtoReader.HasSubValue(packedWireType, source)) { list.Add(base.Tail.Read(null, source)); } } else { object[] array = new object[1]; while (ProtoReader.HasSubValue(packedWireType, source)) { array[0] = base.Tail.Read(null, source); add.Invoke(value, array); } } ProtoReader.EndSubItem(token, source); } else if (flag) { IList list2 = (IList)value; do { list2.Add(base.Tail.Read(null, source)); }while (source.TryReadFieldHeader(field)); } else { object[] array2 = new object[1]; do { array2[0] = base.Tail.Read(null, source); add.Invoke(value, array2); }while (source.TryReadFieldHeader(field)); } if (obj != value) { return(value); } return(null); }
public override object Read(object value, ProtoReader source) { int field = source.FieldNumber; if (value == null) { value = Activator.CreateInstance(concreteType); } if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); if (isList) { IList list = (IList)value; while (ProtoReader.HasSubValue(packedWireType, source)) { list.Add(Tail.Read(null, source)); } } else { object[] args = new object[1]; while (ProtoReader.HasSubValue(packedWireType, source)) { args[0] = Tail.Read(null, source); add.Invoke(value, args); } } ProtoReader.EndSubItem(token, source); } else { if (isList) { IList list = (IList)value; do { list.Add(Tail.Read(null, source)); } while (source.TryReadFieldHeader(field)); } else { object[] args = new object[1]; do { args[0] = Tail.Read(null, source); add.Invoke(value, args); } while (source.TryReadFieldHeader(field)); } } return(value); }
public override object Read(object value, ProtoReader source) { int field = source.FieldNumber; BasicList list = new BasicList(); if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(packedWireType, source)) { list.Add(Tail.Read(null, source)); } ProtoReader.EndSubItem(token, source); } else { do { list.Add(Tail.Read(null, source)); } while (source.TryReadFieldHeader(field)); } int oldLen = AppendToCollection ? ((value == null ? 0 : ((Array)value).Length)) : 0; Array result = Array.CreateInstance(itemType, oldLen + list.Count); if (oldLen != 0) { ((Array)value).CopyTo(result, 0); } list.CopyTo(result, oldLen); return(result); }
public override object Read(object value, ProtoReader source) { int field = source.FieldNumber; BasicList basicList = new BasicList(); if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(packedWireType, source)) { basicList.Add(base.Tail.Read(null, source)); } ProtoReader.EndSubItem(token, source); } else { do { basicList.Add(base.Tail.Read(null, source)); }while (source.TryReadFieldHeader(field)); } int num = AppendToCollection ? ((value != null) ? ((Array)value).Length : 0) : 0; Array array = Array.CreateInstance(itemType, num + basicList.Count); if (num != 0) { ((Array)value).CopyTo(array, 0); } basicList.CopyTo(array, num); return(array); }
public override object Read(ProtoReader source, ref ProtoReader.State state, object value) { TDictionary typed = (AppendToCollection ? ((TDictionary)value) : null) ?? (TDictionary)Activator.CreateInstance(concreteType); do { var key = DefaultKey; var typedValue = DefaultValue; SubItemToken token = ProtoReader.StartSubItem(source, ref state); int field; while ((field = source.ReadFieldHeader(ref state)) > 0) { switch (field) { case 1: key = (TKey)keyTail.Read(source, ref state, null); break; case 2: typedValue = (TValue)Tail.Read(source, ref state, Tail.RequiresOldValue ? (object)typedValue : null); break; default: source.SkipField(ref state); break; } } ProtoReader.EndSubItem(token, source, ref state); typed[key] = typedValue; } while (source.TryReadFieldHeader(ref state, fieldNumber)); return(typed); }
private static void Merge(ProtoReader reader, ref ProtoReader.State state, ref protogen.Database obj) { SubItemToken tok; int field; if (obj == null) { obj = new protogen.Database(); } while ((field = reader.ReadFieldHeader(ref state)) != 0) { switch (field) { case 1: do { protogen.Order _1 = default; tok = ProtoReader.StartSubItem(reader, ref state); Merge(reader, ref state, ref _1); ProtoReader.EndSubItem(tok, reader, ref state); obj.Orders.Add(_1); } while (reader.TryReadFieldHeader(ref state, 1)); break; default: reader.AppendExtensionData(ref state, obj); break; } } }
public override object Read(object value, ProtoReader source) { int fieldNumber = source.FieldNumber; BasicList list = new BasicList(); if ((this.packedWireType != WireType.None) && (source.WireType == WireType.String)) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(this.packedWireType, source)) { list.Add(base.Tail.Read(null, source)); } ProtoReader.EndSubItem(token, source); } else { do { list.Add(base.Tail.Read(null, source)); }while (source.TryReadFieldHeader(fieldNumber)); } int offset = this.AppendToCollection ? ((value == null) ? 0 : ((Array)value).Length) : 0; Array array = Array.CreateInstance(this.itemType, (int)(offset + list.Count)); if (offset != 0) { ((Array)value).CopyTo(array, 0); } list.CopyTo(array, offset); return(array); }
public object Read(object value, ProtoReader source) { UnityEngine.Gradient data = (UnityEngine.Gradient)(value == null ? CreateInstance(source) : value); int fieldNumber = 0; SubItemToken token = ProtoReader.StartSubItem(source); while ((fieldNumber = source.ReadFieldHeader()) != 0) { switch (fieldNumber) { case 1: data.mode = (UnityEngine.GradientMode)source.ReadInt32(); break; case 2: alphaKeys.Clear(); do { alphaKeys.Add((UnityEngine.GradientAlphaKey) this.alphaKeySerializer.Read( new UnityEngine.GradientAlphaKey(), source)); } while (source.TryReadFieldHeader(2)); data.alphaKeys = alphaKeys.ToArray(); break; case 3: colorKeys.Clear(); do { colorKeys.Add((UnityEngine.GradientColorKey) this.colorKeySerializer.Read( new UnityEngine.GradientColorKey(), source)); } while (source.TryReadFieldHeader(3)); data.colorKeys = colorKeys.ToArray(); break; default: source.SkipField(); break; } } ProtoReader.EndSubItem(token, source); return(data); }
// Token: 0x06003575 RID: 13685 RVA: 0x001348B0 File Offset: 0x00132CB0 public override object Read(object value, ProtoReader source) { object obj = builderFactory.Invoke(null, null); int fieldNumber = source.FieldNumber; object[] array = new object[1]; if (base.AppendToCollection && value != null && ((IList)value).Count != 0) { if (addRange != null) { array[0] = value; addRange.Invoke(obj, array); } else { IEnumerator enumerator = ((IList)value).GetEnumerator(); try { while (enumerator.MoveNext()) { object obj2 = enumerator.Current; array[0] = obj2; add.Invoke(obj, array); } } finally { IDisposable disposable; if ((disposable = (enumerator as IDisposable)) != null) { disposable.Dispose(); } } } } if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(packedWireType, source)) { array[0] = Tail.Read(null, source); add.Invoke(obj, array); } ProtoReader.EndSubItem(token, source); } else { do { array[0] = Tail.Read(null, source); add.Invoke(obj, array); }while (source.TryReadFieldHeader(fieldNumber)); } return(finish.Invoke(obj, null)); }
public override object Read(ProtoReader source, ref ProtoReader.State state, object value) { object builderInstance = builderFactory.Invoke(null, null); int field = source.FieldNumber; object[] args = new object[1]; if (AppendToCollection && value != null && (isEmpty != null ? !(bool)isEmpty.GetValue(value, null) : (int)length.GetValue(value, null) != 0)) { if (addRange != null) { args[0] = value; addRange.Invoke(builderInstance, args); } else { foreach (object item in (ICollection)value) { args[0] = item; add.Invoke(builderInstance, args); } } } if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source, ref state); while (ProtoReader.HasSubValue(packedWireType, source)) { args[0] = Tail.Read(source, ref state, null); add.Invoke(builderInstance, args); } ProtoReader.EndSubItem(token, source, ref state); } else { do { args[0] = Tail.Read(source, ref state, null); add.Invoke(builderInstance, args); } while (source.TryReadFieldHeader(ref state, field)); } return(finish.Invoke(builderInstance, null)); }
public override object Read(object value, ProtoReader source) { object obj = this.builderFactory.Invoke(null, null); int fieldNumber = source.FieldNumber; object[] objArray = new object[1]; if (base.AppendToCollection && value != null && ((IList)value).Count != 0) { if (this.addRange == null) { foreach (object obj1 in (IList)value) { objArray[0] = obj1; [email protected](obj, objArray); } } else { objArray[0] = value; this.addRange.Invoke(obj, objArray); } } if (this.packedWireType == WireType.None || source.WireType != WireType.String) { do { objArray[0] = this.Tail.Read(null, source); [email protected](obj, objArray); }while (source.TryReadFieldHeader(fieldNumber)); } else { SubItemToken subItemToken = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(this.packedWireType, source)) { objArray[0] = this.Tail.Read(null, source); [email protected](obj, objArray); } ProtoReader.EndSubItem(subItemToken, source); } return(this.finish.Invoke(obj, null)); }
public override object Read(object value, ProtoReader source) { object obj = builderFactory.Invoke(null, null); int fieldNumber = source.FieldNumber; object[] array = new object[1]; if (base.AppendToCollection && value != null && ((IList)value).Count != 0) { if (addRange != null) { array[0] = value; addRange.Invoke(obj, array); } else { foreach (object item in (IList)value) { object obj2 = array[0] = item; add.Invoke(obj, array); } } } if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(packedWireType, source)) { array[0] = Tail.Read(null, source); add.Invoke(obj, array); } ProtoReader.EndSubItem(token, source); } else { do { array[0] = Tail.Read(null, source); add.Invoke(obj, array); }while (source.TryReadFieldHeader(fieldNumber)); } return(finish.Invoke(obj, null)); }
public override object Read(object value, ProtoReader source) { object obj = this.builderFactory.Invoke(null, null); int fieldNumber = source.FieldNumber; object[] array = new object[1]; if (base.AppendToCollection && value != null && ((IList)value).Count != 0) { if (this.addRange != null) { array[0] = value; this.addRange.Invoke(obj, array); } else { foreach (object current in ((IList)value)) { array[0] = current; this.add.Invoke(obj, array); } } } if (this.packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(this.packedWireType, source)) { array[0] = this.Tail.Read(null, source); this.add.Invoke(obj, array); } ProtoReader.EndSubItem(token, source); } else { do { array[0] = this.Tail.Read(null, source); this.add.Invoke(obj, array); } while (source.TryReadFieldHeader(fieldNumber)); } return this.finish.Invoke(obj, null); }
public object Read(object value, ProtoReader source) { UnityEngine.AnimationCurve data = (UnityEngine.AnimationCurve) (value == null ? CreateInstance(source) : value); int fieldNumber = 0; SubItemToken token = ProtoReader.StartSubItem(source); while ((fieldNumber = source.ReadFieldHeader()) != 0) { switch (fieldNumber) { case 1: data.preWrapMode = (UnityEngine.WrapMode)source.ReadInt32(); break; case 2: data.postWrapMode = (UnityEngine.WrapMode)source.ReadInt32(); break; case 3: keys.Clear(); do { keys.Add((UnityEngine.Keyframe) this.keyframeSerializer.Read( new UnityEngine.Keyframe(), source)); } while (source.TryReadFieldHeader(3)); data.keys = keys.ToArray(); break; default: source.SkipField(); break; } } ProtoReader.EndSubItem(token, source); return(data); }
public override object Read(object untyped, ProtoReader source) { TDictionary typed = AppendToCollection ? ((TDictionary)untyped) : null; //if (typed == null) typed = (TDictionary)Activator.CreateInstance(concreteType); if (typed == null) { typed = (TDictionary)ActivatorUtils.FastCreateInstance(concreteType); } do { var key = DefaultKey; var value = DefaultValue; SubItemToken token = ProtoReader.StartSubItem(source); int field; while ((field = source.ReadFieldHeader()) > 0) { switch (field) { case 1: key = (TKey)keyTail.Read(null, source); break; case 2: value = (TValue)Tail.Read(Tail.RequiresOldValue ? (object)value : null, source); break; default: source.SkipField(); break; } } ProtoReader.EndSubItem(token, source); typed[key] = value; } while (source.TryReadFieldHeader(fieldNumber)); return(typed); }
public override object Read(object value, ProtoReader source) { int num; int fieldNumber = source.FieldNumber; BasicList basicLists = new BasicList(); if (this.packedWireType == WireType.None || source.WireType != WireType.String) { do { basicLists.Add(this.Tail.Read(null, source)); }while (source.TryReadFieldHeader(fieldNumber)); } else { SubItemToken subItemToken = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(this.packedWireType, source)) { basicLists.Add(this.Tail.Read(null, source)); } ProtoReader.EndSubItem(subItemToken, source); } if (this.AppendToCollection) { num = (value == null ? 0 : ((Array)value).Length); } else { num = 0; } int num1 = num; Array arrays = Array.CreateInstance(this.itemType, num1 + basicLists.Count); if (num1 != 0) { ((Array)value).CopyTo(arrays, 0); } basicLists.CopyTo(arrays, num1); return(arrays); }
public override object Read(object value, ProtoReader source) { int field = source.FieldNumber; object origValue = value; if (value == null) value = Activator.CreateInstance(concreteType); bool isList = IsList && !SuppressIList; if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); if (isList) { IList list = (IList)value; while (ProtoReader.HasSubValue(packedWireType, source)) { list.Add(Tail.Read(null, source)); } } else { object[] args = new object[1]; while (ProtoReader.HasSubValue(packedWireType, source)) { args[0] = Tail.Read(null, source); add.Invoke(value, args); } } ProtoReader.EndSubItem(token, source); } else { if (isList) { IList list = (IList)value; do { list.Add(Tail.Read(null, source)); } while (source.TryReadFieldHeader(field)); } else { object[] args = new object[1]; do { args[0] = Tail.Read(null, source); add.Invoke(value, args); } while (source.TryReadFieldHeader(field)); } } return origValue == value ? null : value; }
private static void Merge(ProtoReader reader, ref ProtoReader.State state, ref protogen.Order obj) { SubItemToken tok; int field; if (obj == null) { obj = new protogen.Order(); } while ((field = reader.ReadFieldHeader(ref state)) != 0) { switch (field) { case 1: obj.OrderID = reader.ReadInt32(ref state); break; case 2: obj.CustomerID = reader.ReadString(ref state); break; case 3: obj.EmployeeID = reader.ReadInt32(ref state); break; case 4: obj.OrderDate = BclHelpers.ReadTimestamp(reader, ref state); break; case 5: obj.RequiredDate = BclHelpers.ReadTimestamp(reader, ref state); break; case 6: obj.ShippedDate = BclHelpers.ReadTimestamp(reader, ref state); break; case 7: obj.ShipVia = reader.ReadInt32(ref state); break; case 8: obj.Freight = reader.ReadDouble(ref state); break; case 9: obj.ShipName = reader.ReadString(ref state); break; case 10: obj.ShipAddress = reader.ReadString(ref state); break; case 11: obj.ShipCity = reader.ReadString(ref state); break; case 12: obj.ShipRegion = reader.ReadString(ref state); break; case 13: obj.ShipPostalCode = reader.ReadString(ref state); break; case 14: obj.ShipCountry = reader.ReadString(ref state); break; case 15: do { protogen.OrderLine _15 = default; tok = ProtoReader.StartSubItem(reader, ref state); Merge(reader, ref state, ref _15); ProtoReader.EndSubItem(tok, reader, ref state); obj.Lines.Add(_15); } while (reader.TryReadFieldHeader(ref state, 1)); break; default: reader.AppendExtensionData(ref state, obj); break; } } }
public override object Read(object value, ProtoReader source) { if (nested) { source.ReadFieldHeader(); } int field = source.FieldNumber; BasicList list = new BasicList(); if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(packedWireType, source)) { list.Add(Tail.Read(null, source)); } ProtoReader.EndSubItem(token, source); int oldLen = AppendToCollection ? ((value == null ? 0 : ((Array)value).Length)) : 0; Array result = Array.CreateInstance(itemType, oldLen + list.Count); if (oldLen != 0) ((Array)value).CopyTo(result, 0); list.CopyTo(result, oldLen); return result; } else { bool readObject = true; int arrayKey = 0; value = value ?? Array.CreateInstance(itemType, 0); if (AsReference) { int objectKey = source.ReadInt32(); if (objectKey > 0) { value = source.NetCache.GetKeyedObject(objectKey); readObject = false; } else { bool dummy; arrayKey = source.NetCache.AddObjectKey(value, out dummy); } } else { bool isEmpty = source.ReadInt32() == 1; if (isEmpty) { return value; } } if (readObject) { while (source.TryReadFieldHeader(field)) { list.Add(Tail.Read(null, source)); } Array newArray = Array.CreateInstance(itemType, list.Count); list.CopyTo(newArray, 0); if (AsReference) { source.NetCache.UpdateKeyedObject(arrayKey, value, newArray); } value = newArray; } } return value; }
/// <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); }
public override object Read(object value, ProtoReader source) { IList list = null; object[] args = null; bool createdNew = false; bool asList = IsList && !SuppressIList; // can't call clear? => create new! bool forceNewInstance = !AppendToCollection && !asList; ListHelpers.Read( () => { if (_metaType != null && source.TryReadFieldHeader(ListHelpers.FieldSubtype)) { MetaType mt = _subTypeHelpers.TryRead(_metaType, forceNewInstance ? null : value?.GetType(), source); if (mt != null) { value = mt.Serializer.CreateInstance(source); createdNew = true; } return(true); } return(false); }, () => { if (value == null || (forceNewInstance && !createdNew)) { createdNew = true; value = Activator.CreateInstance(_concreteTypeDefault); ProtoReader.NoteObject(value, source); if (asList) { list = (IList)value; Debug.Assert(list != null); } } else { if (!createdNew) { ProtoReader.NoteObject(value, source); } if (asList) { list = (IList)value; Debug.Assert(list != null); if (!AppendToCollection && !createdNew) { list.Clear(); } } } if (!asList) { args = new object[1]; } }, v => { if (asList) { list.Add(v); } else { args[0] = v; this._add.Invoke(value, args); } }, source); return(value); }
public override object Read(object value, ProtoReader source) { try { int field = source.FieldNumber; object origValue = value; if (value == null) { value = Activator.CreateInstance(concreteType); } bool isList = IsList && !SuppressIList; if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); if (isList) { IList list = (IList)value; while (ProtoReader.HasSubValue(packedWireType, source)) { list.Add(Tail.Read(null, source)); } } else { object[] args = new object[1]; while (ProtoReader.HasSubValue(packedWireType, source)) { args[0] = Tail.Read(null, source); add.Invoke(value, args); } } ProtoReader.EndSubItem(token, source); } else { if (isList) { IList list = (IList)value; do { list.Add(Tail.Read(null, source)); } while (source.TryReadFieldHeader(field)); } else { object[] args = new object[1]; do { args[0] = Tail.Read(null, source); add.Invoke(value, args); } while (source.TryReadFieldHeader(field)); } } return(origValue == value ? null : value); } catch (TargetInvocationException tie) { if (tie.InnerException != null) { throw tie.InnerException; } throw; } }
// Token: 0x0600359A RID: 13722 RVA: 0x00134344 File Offset: 0x00132744 public override object Read(object value, ProtoReader source) { object result; try { int field = source.FieldNumber; object obj = value; if (value == null) { value = Activator.CreateInstance(concreteType); } bool flag = IsList && !SuppressIList; if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); if (flag) { IList list = (IList)value; while (ProtoReader.HasSubValue(packedWireType, source)) { list.Add(Tail.Read(null, source)); } } else { object[] array = new object[1]; while (ProtoReader.HasSubValue(packedWireType, source)) { array[0] = Tail.Read(null, source); add.Invoke(value, array); } } ProtoReader.EndSubItem(token, source); } else if (flag) { IList list2 = (IList)value; do { list2.Add(Tail.Read(null, source)); }while (source.TryReadFieldHeader(field)); } else { object[] array2 = new object[1]; do { array2[0] = Tail.Read(null, source); add.Invoke(value, array2); }while (source.TryReadFieldHeader(field)); } result = ((obj != value) ? value : null); } catch (TargetInvocationException ex) { if (ex.InnerException != null) { throw ex.InnerException; } throw; } return(result); }
public override object Read(object value, ProtoReader source) { int field = source.FieldNumber; object obj = value; if (value == null) { value = Activator.CreateInstance(this.concreteType); } bool flag = this.IsList && !this.SuppressIList; if (this.packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); if (flag) { IList list = (IList)value; while (ProtoReader.HasSubValue(this.packedWireType, source)) { list.Add(this.Tail.Read(null, source)); } } else { object[] array = new object[1]; while (ProtoReader.HasSubValue(this.packedWireType, source)) { array[0] = this.Tail.Read(null, source); this.add.Invoke(value, array); } } ProtoReader.EndSubItem(token, source); } else if (flag) { IList list2 = (IList)value; do { list2.Add(this.Tail.Read(null, source)); } while (source.TryReadFieldHeader(field)); } else { object[] array2 = new object[1]; do { array2[0] = this.Tail.Read(null, source); this.add.Invoke(value, array2); } while (source.TryReadFieldHeader(field)); } return (obj != value) ? value : null; }
public override object Read(object value, ProtoReader source) { Array result = null; int[] lengths = new int[_rank]; int[] indexes = new int[_rank]; int deepestRank = 0; int deepestRankLength = 0; int totalLength = 1; _listHelpers.Read( () => { if (source.TryReadFieldHeader(ListHelpers.FieldLength)) { int length = source.ReadInt32(); lengths[deepestRank++] = length; totalLength *= length; return(true); } return(false); }, () => { // count if (deepestRank != _rank) { ThrowWrongRank(); } // last deepestRank--; deepestRankLength = lengths[deepestRank]; if (totalLength > _readLengthLimit) { ArrayDecorator.ThrowExceededLengthLimit(totalLength, _readLengthLimit); } // TODO use same instance when length equals and no AppendCollection, don't forget to NoteObject even for the same instance result = Read_CreateInstance(value, lengths, out indexes[0], source); }, v => { result.SetValue(v, indexes); //Debug.WriteLine(string.Join(",", indexes.Select(x => x.ToString()).ToArray())); int newIndex = ++indexes[deepestRank]; if (newIndex >= deepestRankLength) { int rankIndex = deepestRank; while (rankIndex > 0) { indexes[rankIndex] = 0; --rankIndex; indexes[rankIndex]++; if (indexes[rankIndex] < lengths[rankIndex]) { break; } } } }, source); return(result); }
public override object Read(object value, ProtoReader source) { int field = source.FieldNumber; BasicList basicList = new BasicList(); if (this.packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(this.packedWireType, source)) { basicList.Add(this.Tail.Read(null, source)); } ProtoReader.EndSubItem(token, source); } else { do { basicList.Add(this.Tail.Read(null, source)); } while (source.TryReadFieldHeader(field)); } int num = (!this.AppendToCollection) ? 0 : ((value != null) ? ((Array)value).Length : 0); Array array = Array.CreateInstance(this.itemType, num + basicList.Count); if (num != 0) { ((Array)value).CopyTo(array, 0); } basicList.CopyTo(array, num); return array; }
public override object Read(object value, ProtoReader source) { int field = source.FieldNumber; BasicList list = new BasicList(); if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(packedWireType, source)) { list.Add(Tail.Read(null, source)); } ProtoReader.EndSubItem(token, source); } else { do { list.Add(Tail.Read(null, source)); } while (source.TryReadFieldHeader(field)); } int oldLen = AppendToCollection ? ((value == null ? 0 : ((Array)value).Length)) : 0; Array result = Array.CreateInstance(itemType, oldLen + list.Count); if (oldLen != 0) ((Array)value).CopyTo(result, 0); list.CopyTo(result, oldLen); return result; }
public void Read(TryReadMetaDelegate readNextMeta, Action prepareInstance, Action <object> add, ProtoReader source) { WireType packedWireType = _packedWireTypeForRead; bool packed = (!_protoCompatibility || packedWireType != WireType.None) && source.WireType == WireType.String; int fieldNumber = source.FieldNumber; bool subItemNeeded = packed || !_protoCompatibility; SubItemToken token = subItemNeeded ? ProtoReader.StartSubItem(source) : new SubItemToken(); if (_protoCompatibility) { // this is not an error that we don't wait for the first item // if field is present there is at least one element prepareInstance?.Invoke(); if (packed) { while (ProtoReader.HasSubValue(packedWireType, source)) { ReadElementContent(add, source); } } else { do { ReadElementContent(add, source); } while (source.TryReadFieldHeader(fieldNumber)); } } else { bool loop; do { loop = false; if (readNextMeta?.Invoke() ?? false) { loop = true; } else if (!source.TryReadFieldHeader(FieldItem)) { if (source.ReadFieldHeader() == 0) { break; // empty } source.SkipField(); loop = true; } } while (loop); prepareInstance?.Invoke(); if (source.FieldNumber == FieldItem) { if (packed) { packedWireType = source.WireType; do { ReadElementContent(add, source); } while (ProtoReader.HasSubValue(packedWireType, source)); } else { do { ReadElementContent(add, source); } while (source.TryReadFieldHeader(FieldItem)); } } } if (subItemNeeded) { ProtoReader.EndSubItem(token, source); } }
public override object Read(object value, ProtoReader source) { object builderInstance = builderFactory.Invoke(null, null); int field = source.FieldNumber; object[] args = new object[1]; if (AppendToCollection && value != null && ((IList)value).Count != 0) { if(addRange !=null) { args[0] = value; addRange.Invoke(builderInstance, args); } else { foreach(object item in (IList)value) { args[0] = item; add.Invoke(builderInstance, args); } } } if (packedWireType != WireType.None && source.WireType == WireType.String) { SubItemToken token = ProtoReader.StartSubItem(source); while (ProtoReader.HasSubValue(packedWireType, source)) { args[0] = Tail.Read(null, source); add.Invoke(builderInstance, args); } ProtoReader.EndSubItem(token, source); } else { do { args[0] = Tail.Read(null, source); add.Invoke(builderInstance, args); } while (source.TryReadFieldHeader(field)); } return finish.Invoke(builderInstance, null); }
public override object Read(object value, ProtoReader source) { Array result = null; BasicList list = null; int reservedTrap = -1; int index = 0; int? length = null; _listHelpers.Read( () => { if (source.TryReadFieldHeader(ListHelpers.FieldLength)) { // we write length to construct an array before deserializing // so we can handle references to array from inside it length = source.ReadInt32(); return(true); } return(false); }, () => { if (length != null) { if (length.Value > _readLengthLimit) { ThrowExceededLengthLimit(length.Value, _readLengthLimit); } // TODO use same instance when length equals, don't forget to NoteObject int oldLen; result = Read_CreateInstance(value, length.Value, -1, out oldLen, source); index = oldLen; } else { reservedTrap = ProtoReader.ReserveNoteObject(source); list = new BasicList(); } }, v => { if (result != null) { result.SetValue(v, index++); } else { list.Add(v); } }, source); if (result == null) { int oldLen; result = Read_CreateInstance(value, list.Count, reservedTrap, out oldLen, source); list.CopyTo(result, oldLen); } return(result); }