/// <inheritdoc />
        public override CtfFieldValue Read(IPacketReader reader, CtfFieldValue parent = null)
        {
            Guard.NotNull(reader, nameof(reader));

            reader.Align((uint)this.Align);

            var structValue = new CtfStructValue();

            foreach (var ctfField in this.Fields)
            {
                CtfFieldValue field = null;
                try
                {
                    field = ctfField.Read(reader, structValue);
                }
                catch (InvalidOperationException)
                {
                    continue;
                }
                bool addedField = structValue.AddValue(field);
                Debug.Assert(addedField);
            }

            return(structValue);
        }
        /// <inheritdoc />
        public override CtfFieldValue Read(IPacketReader reader, CtfFieldValue parent = null)
        {
            Guard.NotNull(reader, nameof(reader));

            reader.Align((uint)this.Align);

            byte[] value = reader.ReadString();

            if (this.Encoding == EncodingTypes.Ascii)
            {
                return(new CtfStringValue(System.Text.Encoding.ASCII.GetString(value, 0, value.Length - 1)));
            }

            return(new CtfStringValue(System.Text.Encoding.UTF8.GetString(value, 0, value.Length - 1)));
        }
        /// <inheritdoc />
        public override CtfFieldValue Read(IPacketReader reader, CtfFieldValue parent = null)
        {
            Guard.NotNull(reader, nameof(reader));

            reader.Align((uint)this.Align);
            byte[] buffer = reader.ReadBits((uint)this.Size);
            if (buffer == null)
            {
                throw new CtfPlaybackException("IPacketReader.ReadBits returned null while reading an integer value.");
            }

            int byteCount = buffer.Length;

            return(this.Read(buffer, byteCount));
        }
예제 #4
0
        /// <inheritdoc />
        public override CtfFieldValue Read(IPacketReader reader, CtfFieldValue parent = null)
        {
            Guard.NotNull(reader, nameof(reader));

            reader.Align((uint)this.Align);

            byte[] buffer = null;
            if ((Exponent + Mantissa) == 32)
            {
                buffer = reader.ReadBits(32);
            }
            else if ((Exponent + Mantissa) == 64)
            {
                buffer = reader.ReadBits(64);
            }
            if (buffer == null)
            {
                throw new CtfPlaybackException("IPacketReader.ReadBits returned null while reading an floating_point value.");
            }

            int byteCount = buffer.Length;

            return(this.Read(buffer, byteCount));
        }