コード例 #1
0
        public void TimeSectionValuesRoundTrip()
        {
            var ms  = new MemoryStream();
            var fio = new FileIO(ms);
            var fw  = new FormattedWriter(fio);
            var wc  = new WriteContext(fw);

            wc.Description = new TeaFileDescription();
            wc.Description.ItemDescription = ItemDescription.FromAnalysis <Event <C> >();
            Time.Scale = Timescale.FromEpoch(33, 77);
            wc.Description.Timescale = Time.Scale;
            ISectionFormatter f = new TimeSectionFormatter();

            f.Write(wc);

            ms.Position = 0;

            var fr = new FormattedReader(fio);
            var rc = new ReadContext(fr);

            rc.Description.Should().Not.Be.Null();
            rc.Description.ItemDescription = wc.Description.ItemDescription;

            f.Read(rc);
            rc.Description.Timescale.Value.Epoch.Should().Be(33);
            rc.Description.Timescale.Value.TicksPerDay.Should().Be(77);

            Executing.This(() => f.Read(rc)).Should().Throw <EndOfStreamException>();
        }
        public void Read(ReadContext c)
        {
            // time scale
            var epoch       = c.Reader.ReadInt64();
            var ticksPerDay = c.Reader.ReadInt64();

            c.Description.Timescale = Timescale.FromEpoch(epoch, ticksPerDay);

            // time fields
            var timeFieldsCount = c.Reader.ReadInt32();
            var offsets         = new List <int>();

            timeFieldsCount.Times(() =>
                                  offsets.Add(c.Reader.ReadInt32()));
            c.Description.TimeFieldOffsets = offsets.AsReadOnly();

            // adorn item description with time aspects, if available
            var id = c.Description.ItemDescription;

            if (id != null)
            {
                bool isFirstTimeField = true;
                foreach (var offset in offsets)
                {
                    var f = id.FindFieldByOffset(offset);
                    if (f == null)
                    {
                        throw new FileFormatException("Time format section contains an entry for a field at offset {0} but no such field was found in the item description.");
                    }
                    f.IsTime         = true;
                    f.IsEventTime    = isFirstTimeField;
                    isFirstTimeField = false;
                }
            }
        }