// Token: 0x0600022A RID: 554 RVA: 0x0000EFAC File Offset: 0x0000D1AC
        public override object Read(object value, ProtoReader source)
        {
            SubItemToken token = ProtoReader.StartSubItem(source);
            int          num;

            while ((num = source.ReadFieldHeader()) > 0)
            {
                if (num == 1)
                {
                    value = this.Tail.Read(value, source);
                }
                else
                {
                    source.SkipField();
                }
            }
            ProtoReader.EndSubItem(token, source);
            return(value);
        }
Esempio n. 2
0
        public override object Read(object value, ProtoReader source)
        {
            SubItemToken tok = ProtoReader.StartSubItem(source);
            int          field;

            while ((field = source.ReadFieldHeader()) > 0)
            {
                if (field == Tag)
                {
                    value = Tail.Read(value, source);
                }
                else
                {
                    source.SkipField();
                }
            }
            ProtoReader.EndSubItem(tok, source);
            return(value);
        }
        private void WriteHeaderIfRequired()
        {
            if (isHeaderWritten)
            {
                return;
            }

            ProtoWriter.WriteFieldHeader(1, WireType.StartGroup, writer);

            currentResultToken = ProtoWriter.StartSubItem(resultIndex, writer);

            IList <ProtoDataColumn> columns = columnFactory.GetColumns(reader, options);

            new HeaderWriter(writer).WriteHeader(columns);

            rowWriter = new RowWriter(writer, columns, options);

            isHeaderWritten = true;
        }
Esempio n. 4
0
        public void WriteHeader(IEnumerable <ProtoDataColumn> columns)
        {
            if (columns == null)
            {
                throw new ArgumentNullException("columns");
            }

            foreach (ProtoDataColumn column in columns)
            {
                // for each, write the name and data type
                ProtoWriter.WriteFieldHeader(2, WireType.StartGroup, writer);
                SubItemToken columnToken = ProtoWriter.StartSubItem(column, writer);
                ProtoWriter.WriteFieldHeader(1, WireType.String, writer);
                ProtoWriter.WriteString(column.ColumnName, writer);
                ProtoWriter.WriteFieldHeader(2, WireType.Variant, writer);
                ProtoWriter.WriteInt32((int)column.ProtoDataType, writer);
                ProtoWriter.EndSubItem(columnToken, writer);
            }
        }
        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 object Read(object value, ProtoReader source)
        {
            UnityEngine.Keyframe data = (UnityEngine.Keyframe)value;

            int fieldNumber = 0;

            SubItemToken token = ProtoReader.StartSubItem(source);

            while ((fieldNumber = source.ReadFieldHeader()) != 0)
            {
                switch (fieldNumber)
                {
                case 1:
                    data.time = source.ReadSingle();
                    break;

                case 2:
                    data.value = source.ReadSingle();
                    break;

                case 3:
                    data.inTangent = source.ReadSingle();
                    break;

                case 4:
                    data.outTangent = source.ReadSingle();
                    break;

                case 5:
                    data.tangentMode = source.ReadInt32();
                    break;

                default:
                    source.SkipField();
                    break;
                }
            }

            ProtoReader.EndSubItem(token, source);

            return(data);
        }
Esempio n. 7
0
        public static DataSet ProtoRead(Stream stream)
        {
            DataSet ds = new DataSet();

            using (ProtoReader reader = new ProtoReader(stream, null, null))
            {
                int num;
                while ((num = reader.ReadFieldHeader()) != 0)
                {
                    if (num <= 0)
                    {
                        continue;
                    }
                    switch (num)
                    {
                    case 1:
                    {
                        SubItemToken token = ProtoReader.StartSubItem(reader);
                        ProtoReadTable(ds, reader);
                        ProtoReader.EndSubItem(token, reader);
                        continue;
                    }

                    case 3:
                    {
                        ds.DataSetName = reader.ReadString();
                        continue;
                    }

                    case 4:
                    {
                        string       s       = reader.ReadString();
                        MemoryStream stream2 = new MemoryStream(Encoding.UTF8.GetBytes(s));
                        ds.ReadXmlSchema(stream2);
                        continue;
                    }
                    }
                    reader.SkipField();
                }
            }
            return(ds);
        }
        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));
        }
Esempio n. 9
0
        public override void Write(object value, ProtoWriter dest)

        {
            SubItemToken token;

            bool writePacked = WritePacked;

            if (writePacked)

            {
                ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest);

                token = ProtoWriter.StartSubItem(value, dest);

                ProtoWriter.SetPackedField(fieldNumber, dest);
            }

            else

            {
                token = new SubItemToken(); // default
            }

            bool checkForNull = !SupportNull;

            foreach (object subItem in (IEnumerable)value)

            {
                if (checkForNull && subItem == null)
                {
                    throw new NullReferenceException();
                }

                Tail.Write(subItem, dest);
            }

            if (writePacked)

            {
                ProtoWriter.EndSubItem(token, dest);
            }
        }
Esempio n. 10
0
        private static SubItemToken StartSubItem(object instance, ProtoWriter writer, bool allowFixed)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (++writer.depth > 25)
            {
                writer.CheckRecursionStackAndPush(instance);
            }
            if (writer.packedFieldNumber != 0)
            {
                throw new InvalidOperationException("Cannot begin a sub-item while performing packed encoding");
            }
            switch (writer.wireType)
            {
            case WireType.String:
                writer.wireType = WireType.None;
                ProtoWriter.DemandSpace(32, writer);
                writer.flushLock++;
                writer.position++;
                return(new SubItemToken(writer.ioIndex++));

            case WireType.StartGroup:
                writer.wireType = WireType.None;
                return(new SubItemToken(-writer.fieldNumber));

            case WireType.Fixed32:
            {
                if (!allowFixed)
                {
                    throw ProtoWriter.CreateException(writer);
                }
                ProtoWriter.DemandSpace(32, writer);
                writer.flushLock++;
                SubItemToken token = new SubItemToken(writer.ioIndex);
                ProtoWriter.IncrementedAndReset(4, writer);
                return(token);
            }
            }
            throw ProtoWriter.CreateException(writer);
        }
Esempio n. 11
0
        public void Write(object value, ProtoWriter dest)
        {
            UnityEngine.Vector4 data = (UnityEngine.Vector4)value;

            SubItemToken token = ProtoWriter.StartSubItem(value, dest);

            ProtoWriter.WriteFieldHeader(1, WireType.Fixed32, dest);
            ProtoWriter.WriteSingle(data.x, dest);

            ProtoWriter.WriteFieldHeader(2, WireType.Fixed32, dest);
            ProtoWriter.WriteSingle(data.y, dest);

            ProtoWriter.WriteFieldHeader(3, WireType.Fixed32, dest);
            ProtoWriter.WriteSingle(data.z, dest);

            ProtoWriter.WriteFieldHeader(4, WireType.Fixed32, dest);
            ProtoWriter.WriteSingle(data.w, dest);

            ProtoWriter.EndSubItem(token, dest);
        }
Esempio n. 12
0
        public void Write(object value, ProtoWriter dest)
        {
            UnityEngine.Color32 data = (UnityEngine.Color32)value;

            SubItemToken token = ProtoWriter.StartSubItem(value, dest);

            ProtoWriter.WriteFieldHeader(1, WireType.Variant, dest);
            ProtoWriter.WriteByte(data.r, dest);

            ProtoWriter.WriteFieldHeader(2, WireType.Variant, dest);
            ProtoWriter.WriteByte(data.g, dest);

            ProtoWriter.WriteFieldHeader(3, WireType.Variant, dest);
            ProtoWriter.WriteByte(data.b, dest);

            ProtoWriter.WriteFieldHeader(4, WireType.Variant, dest);
            ProtoWriter.WriteByte(data.a, dest);

            ProtoWriter.EndSubItem(token, dest);
        }
        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 void Write(object value, ProtoWriter dest)
        {
            UnityEngine.AnimationCurve data = (UnityEngine.AnimationCurve)value;

            SubItemToken token = ProtoWriter.StartSubItem(value, dest);

            ProtoWriter.WriteFieldHeader(1, WireType.Variant, dest);
            ProtoWriter.WriteInt32((int)data.preWrapMode, dest);

            ProtoWriter.WriteFieldHeader(2, WireType.Variant, dest);
            ProtoWriter.WriteInt32((int)data.postWrapMode, dest);

            for (int i = 0; i < data.keys.Length; ++i)
            {
                ProtoWriter.WriteFieldHeader(3, WireType.String, dest);
                this.keyframeSerializer.Write(data.keys[i], dest);
            }


            ProtoWriter.EndSubItem(token, dest);
        }
        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);
        }
Esempio n. 16
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);
        }
Esempio n. 17
0
        public override void Write(object value, ProtoWriter dest)
        {
            IList        arr = (IList)value;
            int          len = arr.Count;
            SubItemToken token;
            bool         writePacked = (options & OPTIONS_WritePacked) != 0;

            if (writePacked)
            {
                ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest);
                token = ProtoWriter.StartSubItem(value, dest);
                ProtoWriter.SetPackedField(fieldNumber, dest);
            }
            else
            {
                token = new SubItemToken(); // default
            }
            bool checkForNull       = !SupportNull;
            bool throwNullReference = !DontThrowNullReference;

            for (int i = 0; i < len; i++)
            {
                object obj = arr[i];
                if (checkForNull && obj == null)
                {
                    if (throwNullReference)
                    {
                        throw new NullReferenceException();
                    }
                }
                else
                {
                    Tail.Write(obj, dest);
                }
            }
            if (writePacked)
            {
                ProtoWriter.EndSubItem(token, dest);
            }
        }
Esempio n. 18
0
        public object Read(object value, ProtoReader source)
        {
            UnityEngine.Vector4 data = (UnityEngine.Vector4)value;

            int fieldNumber = 0;

            SubItemToken token = ProtoReader.StartSubItem(source);

            while ((fieldNumber = source.ReadFieldHeader()) != 0)
            {
                switch (fieldNumber)
                {
                case 1:
                    data.x = source.ReadSingle();
                    break;

                case 2:
                    data.y = source.ReadSingle();
                    break;

                case 3:
                    data.z = source.ReadSingle();
                    break;

                case 4:
                    data.w = source.ReadSingle();
                    break;

                default:
                    source.SkipField();
                    break;
                }
            }

            ProtoReader.EndSubItem(token, source);

            return(data);
        }
Esempio n. 19
0
        public object Read(object value, ProtoReader source)
        {
            UnityEngine.Color32 data = (UnityEngine.Color32)value;

            int fieldNumber = 0;

            SubItemToken token = ProtoReader.StartSubItem(source);

            while ((fieldNumber = source.ReadFieldHeader()) != 0)
            {
                switch (fieldNumber)
                {
                case 1:
                    data.r = source.ReadByte();
                    break;

                case 2:
                    data.g = source.ReadByte();
                    break;

                case 3:
                    data.b = source.ReadByte();
                    break;

                case 4:
                    data.a = source.ReadByte();
                    break;

                default:
                    source.SkipField();
                    break;
                }
            }

            ProtoReader.EndSubItem(token, source);

            return(data);
        }
        private void ReadNextTableHeader()
        {
            ResetSchemaTable();
            currentRow = null;

            currentTableToken = ProtoReader.StartSubItem(reader);

            AdvanceToNextField();

            if (currentField == 0)
            {
                reachedEndOfCurrentTable = true;
                ProtoReader.EndSubItem(currentTableToken, reader);
                return;
            }

            if (currentField != 2)
            {
                throw new InvalidOperationException("No header found! Invalid/corrupt stream.");
            }

            ReadHeader();
        }
Esempio n. 21
0
        public void Write(object value, ProtoWriter dest)
        {
            UnityEngine.Gradient data = (UnityEngine.Gradient)value;

            SubItemToken token = ProtoWriter.StartSubItem(value, dest);

            ProtoWriter.WriteFieldHeader(1, WireType.Variant, dest);
            ProtoWriter.WriteInt32((int)data.mode, dest);

            for (int i = 0; i < data.alphaKeys.Length; ++i)
            {
                ProtoWriter.WriteFieldHeader(2, WireType.String, dest);
                this.alphaKeySerializer.Write(data.alphaKeys[i], dest);
            }

            for (int i = 0; i < data.colorKeys.Length; ++i)
            {
                ProtoWriter.WriteFieldHeader(3, WireType.String, dest);
                this.colorKeySerializer.Write(data.colorKeys[i], dest);
            }

            ProtoWriter.EndSubItem(token, dest);
        }
        public void Write(object value, ProtoWriter dest)
        {
            UnityEngine.Keyframe data = (UnityEngine.Keyframe)value;

            SubItemToken token = ProtoWriter.StartSubItem(value, dest);

            ProtoWriter.WriteFieldHeader(1, WireType.Fixed32, dest);
            ProtoWriter.WriteSingle(data.time, dest);

            ProtoWriter.WriteFieldHeader(2, WireType.Fixed32, dest);
            ProtoWriter.WriteSingle(data.value, dest);

            ProtoWriter.WriteFieldHeader(3, WireType.Fixed32, dest);
            ProtoWriter.WriteSingle(data.inTangent, dest);

            ProtoWriter.WriteFieldHeader(4, WireType.Fixed32, dest);
            ProtoWriter.WriteSingle(data.outTangent, dest);

            ProtoWriter.WriteFieldHeader(5, WireType.Variant, dest);
            ProtoWriter.WriteInt32(data.tangentMode, dest);

            ProtoWriter.EndSubItem(token, dest);
        }
Esempio n. 23
0
 public override void Write(object value, ProtoWriter dest)
 {
     if (packedFieldNumber > 0)
     {
         IEnumerator iter = ((IEnumerable)value).GetEnumerator();
         using (iter as IDisposable)
         {
             if (iter.MoveNext())
             {
                 ProtoWriter.WriteFieldHeader(packedFieldNumber, WireType.String, dest);
                 SubItemToken token = ProtoWriter.StartSubItem(value, dest);
                 ProtoWriter.SetPackedField(packedFieldNumber, dest);
                 do
                 {
                     object subItem = iter.Current;
                     if (subItem == null)
                     {
                         throw new NullReferenceException();
                     }
                     Tail.Write(subItem, dest);
                 } while (iter.MoveNext());
                 ProtoWriter.EndSubItem(token, dest);
             }
         }
     }
     else
     {
         foreach (object subItem in (IEnumerable)value)
         {
             if (subItem == null)
             {
                 throw new NullReferenceException();
             }
             Tail.Write(subItem, dest);
         }
     }
 }
Esempio n. 24
0
        public override void Write(object value, ProtoWriter dest)
        {
            IList arr = (IList)value;
            int   len = arr.Count;

            if (packedFieldNumber > 0)
            {
                if (len != 0)
                {
                    ProtoWriter.WriteFieldHeader(packedFieldNumber, WireType.String, dest);
                    SubItemToken token = ProtoWriter.StartSubItem(value, dest);
                    ProtoWriter.SetPackedField(packedFieldNumber, dest);
                    for (int i = 0; i < len; i++)
                    {
                        object obj = arr[i];
                        if (obj == null)
                        {
                            throw new NullReferenceException();
                        }
                        Tail.Write(obj, dest);
                    }
                    ProtoWriter.EndSubItem(token, dest);
                }
            }
            else
            {
                for (int i = 0; i < len; i++)
                {
                    object obj = arr[i];
                    if (obj == null)
                    {
                        throw new NullReferenceException();
                    }
                    Tail.Write(obj, dest);
                }
            }
        }
Esempio n. 25
0
        public override object Read(object value, ProtoReader source)
        {
            SubItemToken subItemToken = ProtoReader.StartSubItem(source);

            while (true)
            {
                int num  = source.ReadFieldHeader();
                int num1 = num;
                if (num <= 0)
                {
                    break;
                }
                if (num1 != 1)
                {
                    source.SkipField();
                }
                else
                {
                    value = this.Tail.Read(value, source);
                }
            }
            ProtoReader.EndSubItem(subItemToken, source);
            return(value);
        }
        public override void Write(object value, ProtoWriter dest)
        {
            IList arr = (IList)value;
            int len = arr.Count;
            SubItemToken token;
            bool writePacked = (options & OPTIONS_WritePacked) != 0;
			bool writeObject = true;
			bool checkForNull = !SupportNull;
			
            if (writePacked)
            {
                ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest);
                token = ProtoWriter.StartSubItem(value, dest);
                ProtoWriter.SetPackedField(fieldNumber, dest);
            }
            else
            { 
				token = new SubItemToken(); // default

            	//WireType previousWireType = dest.WireType;

				ProtoWriter.WriteFieldHeader(fieldNumber, WireType.Variant, dest);

				if (AsReference)
				{
					bool existing;
					int objectKey = dest.NetCache.AddObjectKey(value, out existing);

					writeObject = !existing;
					ProtoWriter.WriteUInt32(existing ? (uint)objectKey : 0, dest);
				}
				else
				{
					bool isEmpty = len == 0;
					ProtoWriter.WriteBoolean(isEmpty, dest);
				}

            	//dest.WireType = previousWireType;
            }

			if (writeObject)
			{
				for (int i = 0; i < len; i++)
				{
					object obj = arr[i];
					if (checkForNull && obj == null)
					{
						throw new NullReferenceException();
					}
					Tail.Write(obj, dest);
				}
			}

        	if (writePacked)
            {
                ProtoWriter.EndSubItem(token, dest);
            }            
        }
Esempio n. 27
0
 public override void Write(object value, ProtoWriter dest)
 {
     IList arr = (IList)value;
     int len = arr.Count;
     SubItemToken token;
     bool writePacked = (options & OPTIONS_WritePacked) != 0;
     if (writePacked)
     {
         ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest);
         token = ProtoWriter.StartSubItem(value, dest);
         ProtoWriter.SetPackedField(fieldNumber, dest);
     }
     else
     {
         token = new SubItemToken(); // default
     }
     bool checkForNull = !SupportNull;
     for (int i = 0; i < len; i++)
     {
         object obj = arr[i];
         if (checkForNull && obj == null) { throw new NullReferenceException(); }
         Tail.Write(obj, dest);
     }
     if (writePacked)
     {
         ProtoWriter.EndSubItem(token, dest);
     }            
 }
Esempio n. 28
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;
     }
 }
        private void ReadNextTableHeader()
        {
            ResetSchemaTable();
            currentRow = null;

            currentTableToken = ProtoReader.StartSubItem(reader);

            AdvanceToNextField();

            if (currentField == 0)
            {
                reachedEndOfCurrentTable = true;
                ProtoReader.EndSubItem(currentTableToken, reader);
                return;
            }

            if (currentField != 2)
            {
                throw new InvalidOperationException("No header found! Invalid/corrupt stream.");
            }

            ReadHeader();
        }
 public override void Write(object value, ProtoWriter dest)
 {
     SubItemToken token;
     bool writePacked = WritePacked;
     if (writePacked)
     {
         ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest);
         token = ProtoWriter.StartSubItem(value, dest);
         ProtoWriter.SetPackedField(fieldNumber, dest);
     }
     else
     {
         token = new SubItemToken(); // default
     }
     foreach (object subItem in (IEnumerable)value)
     {
         if (subItem == null) { throw new NullReferenceException(); }
         Tail.Write(subItem, dest);
     }
     if (writePacked)
     {
         ProtoWriter.EndSubItem(token, dest);
     }
 }
Esempio n. 31
0
        private static void EndSubItem(SubItemToken token, ProtoWriter writer, PrefixStyle style)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (writer.wireType != WireType.None)
            {
                throw ProtoWriter.CreateException(writer);
            }
            int value = token.value;

            if (writer.depth <= 0)
            {
                throw ProtoWriter.CreateException(writer);
            }
            if (writer.depth-- > 25)
            {
                writer.PopRecursionStack();
            }
            writer.packedFieldNumber = 0;
            if (value < 0)
            {
                ProtoWriter.WriteHeaderCore(-value, WireType.EndGroup, writer);
                writer.wireType = WireType.None;
                return;
            }
            switch (style)
            {
            case PrefixStyle.Base128:
            {
                int  len    = writer.ioIndex - value - 1;
                int  offset = 0;
                uint tmp    = (uint)len;
                while ((tmp >>= 7) != 0u)
                {
                    offset++;
                }
                if (offset == 0)
                {
                    writer.ioBuffer[value] = (byte)(len & 127);
                }
                else
                {
                    ProtoWriter.DemandSpace(offset, writer);
                    byte[] blob = writer.ioBuffer;
                    Helpers.BlockCopy(blob, value + 1, blob, value + 1 + offset, len);
                    tmp = (uint)len;
                    do
                    {
                        blob[value++] = (byte)((tmp & 127u) | 128u);
                    }while ((tmp >>= 7) != 0u);
                    blob[value - 1]  = (byte)((int)blob[value - 1] & -129);
                    writer.position += offset;
                    writer.ioIndex  += offset;
                }
                break;
            }

            case PrefixStyle.Fixed32:
            {
                int len = writer.ioIndex - value - 4;
                ProtoWriter.WriteInt32ToBuffer(len, writer.ioBuffer, value);
                break;
            }

            case PrefixStyle.Fixed32BigEndian:
            {
                int    len    = writer.ioIndex - value - 4;
                byte[] buffer = writer.ioBuffer;
                ProtoWriter.WriteInt32ToBuffer(len, buffer, value);
                byte b = buffer[value];
                buffer[value]     = buffer[value + 3];
                buffer[value + 3] = b;
                b = buffer[value + 1];
                buffer[value + 1] = buffer[value + 2];
                buffer[value + 2] = b;
                break;
            }

            default:
                throw new ArgumentOutOfRangeException("style");
            }
            if (--writer.flushLock == 0 && writer.ioIndex >= 1024)
            {
                ProtoWriter.Flush(writer);
            }
        }
Esempio n. 32
0
 public static void EndSubItem(SubItemToken token, ProtoWriter writer)
 {
     ProtoWriter.EndSubItem(token, writer, PrefixStyle.Base128);
 }
Esempio n. 33
0
        public static void ProtoWrite(DataTable table, Stream stream)
        {
            using (ProtoWriter writer = new ProtoWriter(stream, null, null))
            {
                if (!string.IsNullOrEmpty(table.TableName))
                {
                    ProtoWriter.WriteFieldHeader(1, WireType.String, writer);
                    ProtoWriter.WriteString(table.TableName, writer);
                }
                DataColumnCollection columns     = table.Columns;
                Action <object>[]    actionArray = new Action <object> [columns.Count];
                int index = 0;
                foreach (DataColumn column in columns)
                {
                    MappedType      boolean;
                    Action <object> action;
                    Action <object> action2  = null;
                    Action <object> action3  = null;
                    Action <object> action4  = null;
                    Action <object> action5  = null;
                    Action <object> action6  = null;
                    Action <object> action7  = null;
                    Action <object> action8  = null;
                    Action <object> action9  = null;
                    Action <object> action10 = null;
                    Action <object> action11 = null;
                    Action <object> action12 = null;
                    ProtoWriter.WriteFieldHeader(2, WireType.StartGroup, writer);
                    SubItemToken token = ProtoWriter.StartSubItem(column, writer);
                    ProtoWriter.WriteFieldHeader(1, WireType.String, writer);
                    ProtoWriter.WriteString(column.ColumnName, writer);
                    ProtoWriter.WriteFieldHeader(2, WireType.Variant, writer);
                    switch (Type.GetTypeCode(column.DataType))
                    {
                    case TypeCode.Boolean:
                        boolean = MappedType.Boolean;
                        break;

                    case TypeCode.Byte:
                        boolean = MappedType.Byte;
                        break;

                    case TypeCode.Int16:
                        boolean = MappedType.Int16;
                        break;

                    case TypeCode.Int32:
                        boolean = MappedType.Int32;
                        break;

                    case TypeCode.Int64:
                        boolean = MappedType.Int64;
                        break;

                    case TypeCode.Double:
                        boolean = MappedType.Double;
                        break;

                    case TypeCode.Decimal:
                        boolean = MappedType.Decimal;
                        break;

                    case TypeCode.DateTime:
                        boolean = MappedType.DateTime;
                        break;

                    case TypeCode.String:
                        boolean = MappedType.String;
                        break;

                    default:
                        if (column.DataType == typeof(Guid))
                        {
                            boolean = MappedType.Guid;
                        }
                        else if (column.DataType == typeof(byte[]))
                        {
                            boolean = MappedType.Byte;
                        }
                        else
                        {
                            if (column.DataType != typeof(TimeSpan))
                            {
                                throw new NotSupportedException(column.DataType.Name);
                            }
                            boolean = MappedType.TimeSpan;
                        }
                        break;
                    }
                    ProtoWriter.WriteInt32((int)boolean, writer);
                    ProtoWriter.WriteFieldHeader(3, WireType.String, writer);
                    ProtoWriter.WriteString(column.Caption, writer);
                    ProtoWriter.EndSubItem(token, writer);
                    int field = index + 1;
                    switch (boolean)
                    {
                    case MappedType.Boolean:
                        if (action2 == null)
                        {
                            action2 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.Variant, writer);
                                ProtoWriter.WriteBoolean(Convert.ToBoolean(value), writer);
                            };
                        }
                        action = action2;
                        break;

                    case MappedType.Byte:
                        if (action3 == null)
                        {
                            action3 = delegate(object value)
                            {
                                byte[] inArray = value as byte[];
                                string str     = Convert.ToBase64String(inArray);
                                ProtoWriter.WriteFieldHeader(field, WireType.String, writer);
                                ProtoWriter.WriteString(str, writer);
                            };
                        }
                        action = action3;
                        break;

                    case MappedType.Double:
                        if (action4 == null)
                        {
                            action4 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.Fixed64, writer);
                                ProtoWriter.WriteDouble(Convert.ToDouble(value), writer);
                            };
                        }
                        action = action4;
                        break;

                    case MappedType.Int16:
                        if (action7 == null)
                        {
                            action7 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.Variant, writer);
                                ProtoWriter.WriteInt16((short)value, writer);
                            };
                        }
                        action = action7;
                        break;

                    case MappedType.Int32:
                        if (action8 == null)
                        {
                            action8 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.Variant, writer);
                                ProtoWriter.WriteInt32(Convert.ToInt32(value), writer);
                            };
                        }
                        action = action8;
                        break;

                    case MappedType.Int64:
                        if (action9 == null)
                        {
                            action9 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.Variant, writer);
                                ProtoWriter.WriteInt64((long)value, writer);
                            };
                        }
                        action = action9;
                        break;

                    case MappedType.String:
                        if (action5 == null)
                        {
                            action5 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.String, writer);
                                ProtoWriter.WriteString(Convert.ToString(value), writer);
                            };
                        }
                        action = action5;
                        break;

                    case MappedType.Decimal:
                        if (action6 == null)
                        {
                            action6 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.StartGroup, writer);
                                BclHelpers.WriteDecimal(Convert.ToDecimal(value), writer);
                            };
                        }
                        action = action6;
                        break;

                    case MappedType.Guid:
                        if (action10 == null)
                        {
                            action10 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.StartGroup, writer);
                                BclHelpers.WriteGuid((Guid)value, writer);
                            };
                        }
                        action = action10;
                        break;

                    case MappedType.DateTime:
                        if (action11 == null)
                        {
                            action11 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.StartGroup, writer);
                                BclHelpers.WriteDateTime(Convert.ToDateTime(value), writer);
                            };
                        }
                        action = action11;
                        break;

                    case MappedType.TimeSpan:
                        if (action12 == null)
                        {
                            action12 = delegate(object value)
                            {
                                ProtoWriter.WriteFieldHeader(field, WireType.StartGroup, writer);
                                if (value is TimeSpan)
                                {
                                    BclHelpers.WriteTimeSpan((TimeSpan)value, writer);
                                }
                                else
                                {
                                    BclHelpers.WriteTimeSpan(TimeSpan.Zero, writer);
                                }
                            };
                        }
                        action = action12;
                        break;

                    default:
                        throw new NotSupportedException(column.DataType.Name);
                    }
                    actionArray[index++] = action;
                }
                foreach (DataRow row in table.Rows)
                {
                    index = 0;
                    ProtoWriter.WriteFieldHeader(3, WireType.StartGroup, writer);
                    SubItemToken token2 = ProtoWriter.StartSubItem(row, writer);
                    foreach (DataColumn column2 in columns)
                    {
                        object obj2 = row[column2];
                        if ((obj2 != null) && !(obj2 is DBNull))
                        {
                            actionArray[index](obj2);
                        }
                        index++;
                    }
                    ProtoWriter.EndSubItem(token2, writer);
                }
            }
        }
Esempio n. 34
0
        private void WriteHeaderIfRequired()
        {
            if (isHeaderWritten)
                return;

            ProtoWriter.WriteFieldHeader(1, WireType.StartGroup, writer);

            currentResultToken = ProtoWriter.StartSubItem(resultIndex, writer);

            var columns = columnFactory.GetColumns(reader, options);
            new HeaderWriter(writer).WriteHeader(columns);

            rowWriter = new RowWriter(writer, columns, options);

            isHeaderWritten = true;
        }
Esempio n. 35
0
        /// <summary>
        /// Serialize an <see cref="System.Data.IDataReader"/> to a binary stream using protocol-buffers.
        /// </summary>
        /// <param name="stream">The <see cref="System.IO.Stream"/> to write to.</param>
        /// <param name="reader">The <see cref="System.Data.IDataReader"/>who's contents to serialize.</param>
        /// <param name="options"><see cref="ProtoDataWriterOptions"/> specifying any custom serialization options.</param>
        public void Serialize(Stream stream, IDataReader reader, ProtoDataWriterOptions options)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            // Null options are permitted to be passed in.
            options = options ?? new ProtoDataWriterOptions();

            // For a (minor) performance improvement, Serialize() has been left
            // as a single long method with functions manually inlined.
            var resultIndex = 0;

            using (var writer = new ProtoWriter(stream, null, null))
            {
                do
                {
                    // This is the underlying protocol buffers structure we use:
                    //
                    // <1 StartGroup> each DataTable
                    // <SubItem>
                    //     <2 StartGroup> each DataColumn
                    //     <SubItem>
                    //         <1 String> Column Name
                    //         <2 Variant> Column ProtoDataType (enum casted to int)
                    //     </SubItem>
                    //     <3 StartGroup> each DataRow
                    //     <SubItem>
                    //         <(# Column Index) (corresponding type)> Field Value
                    //     </SubItem>
                    // </SubItem>
                    //
                    // NB if Field Value is a DataTable, the whole DataTable is

                    // write the table
                    ProtoWriter.WriteFieldHeader(1, WireType.StartGroup, writer);

                    SubItemToken resultToken = ProtoWriter.StartSubItem(resultIndex, writer);

                    var columns = new ProtoDataColumnFactory().GetColumns(reader, options);

                    new HeaderWriter(writer).WriteHeader(columns);

                    var rowWriter = new RowWriter(writer, columns, options);

                    // write the rows
                    while (reader.Read())
                    {
                        rowWriter.WriteRow(reader);
                    }

                    ProtoWriter.EndSubItem(resultToken, writer);

                    resultIndex++;
                }while (reader.NextResult());
            }
        }