/// <summary>
        /// Initializes a new instance of the <see cref="ProtoDataReader"/> class.
        /// </summary>
        /// <param name="stream">A <see cref="Stream"/> that represents the stream the <see cref="ProtoDataReader"/> reads from.</param>
        public ProtoDataReader(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            this.stream  = stream;
            this.reader  = new ProtoReader(stream, null, null);
            this.context = new ProtoReaderContext(this.reader);

            ResultReader.ReadResult(this.context);
        }
Ejemplo n.º 2
0
        public static bool ReadRecord(ProtoReaderContext context)
        {
            if (context.ReachedEndOfCurrentResult)
            {
                return(false);
            }

            if (context.CurrentFieldHeader == 0)
            {
                context.EndSubItem();

                context.ReachedEndOfCurrentResult = true;

                return(false);
            }

            if (context.Buffers == null)
            {
                context.Buffers = new ProtoBufDataBuffer[context.Columns.Count];

                ProtoBufDataBuffer.Initialize(context.Buffers);
            }
            else
            {
                ProtoBufDataBuffer.Clear(context.Buffers);
            }

            context.StartSubItem();

            ReadRecordValues(context);

            context.EndSubItem();

            context.ReadFieldHeader();

            return(true);
        }
Ejemplo n.º 3
0
        private static void ReadRecordValues(ProtoReaderContext context)
        {
            while (context.ReadFieldHeader() != NoneFieldHeader)
            {
                // Backwards compatibility or unnecessary?
                if (context.CurrentFieldHeader > context.Buffers.Length)
                {
                    context.Reader.SkipField();

                    continue;
                }

                var columnIndex = context.CurrentFieldHeader - 1;

                switch (context.Columns[columnIndex].ProtoDataType)
                {
                case ProtoDataType.String:
                    context.Buffers[columnIndex].String = context.Reader.ReadString();
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.DateTime:
                    context.Buffers[columnIndex].DateTime = BclHelpers.ReadDateTime(context.Reader);
                    context.Buffers[columnIndex].IsNull   = false;
                    break;

                case ProtoDataType.Int:
                    context.Buffers[columnIndex].Int    = context.Reader.ReadInt32();
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.Long:
                    context.Buffers[columnIndex].Long   = context.Reader.ReadInt64();
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.Short:
                    context.Buffers[columnIndex].Short  = context.Reader.ReadInt16();
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.Bool:
                    context.Buffers[columnIndex].Bool   = context.Reader.ReadBoolean();
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.Byte:
                    context.Buffers[columnIndex].Byte   = context.Reader.ReadByte();
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.Float:
                    context.Buffers[columnIndex].Float  = context.Reader.ReadSingle();
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.Double:
                    context.Buffers[columnIndex].Double = context.Reader.ReadDouble();
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.Guid:
                    context.Buffers[columnIndex].Guid   = BclHelpers.ReadGuid(context.Reader);
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.Char:
                    context.Buffers[columnIndex].Char   = (char)context.Reader.ReadInt16();
                    context.Buffers[columnIndex].IsNull = false;
                    break;

                case ProtoDataType.Decimal:
                    context.Buffers[columnIndex].Decimal = BclHelpers.ReadDecimal(context.Reader);
                    context.Buffers[columnIndex].IsNull  = false;
                    break;

                case ProtoDataType.ByteArray:
                    context.Buffers[columnIndex].ByteArray = ProtoReader.AppendBytes(null, context.Reader);
                    context.Buffers[columnIndex].IsNull    = false;
                    break;

                case ProtoDataType.CharArray:
                    context.Buffers[columnIndex].CharArray = context.Reader.ReadString().ToCharArray();
                    context.Buffers[columnIndex].IsNull    = false;
                    break;

                case ProtoDataType.TimeSpan:
                    context.Buffers[columnIndex].TimeSpan = BclHelpers.ReadTimeSpan(context.Reader);
                    context.Buffers[columnIndex].IsNull   = false;
                    break;
                }
            }
        }