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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #9
0
        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;
                }
            }
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        // 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));
        }
Example #14
0
        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);
        }
Example #20
0
        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);
        }
Example #25
0
        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);
        }
Example #26
0
 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;
     }
 }
Example #27
0
        // 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);
        }
Example #28
0
 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);
        }
Example #30
0
 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;
 }
Example #31
0
 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;
 }
Example #32
0
        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);
        }
Example #34
0
        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);
        }