public LogSampleProvider(LogFileReader reader, IEnumerable<string> groups, int startTime, int endTime)
        {
            Reader = reader;
            _groups = groups.ToList();
            StartTime = startTime;
            EndTime = endTime;

            // Make base sample.
            TimeLine = reader.Groups.SelectMany(x => x.Timeline.Keys).Distinct().OrderBy(x => x).ToList();

            // If this time doesn't exist; search the closest related.
            if (!TimeLine.Contains(startTime))
                startTime = TimeLine.Select(x => x - startTime).OrderBy(x => x).Take(1).FirstOrDefault() + startTime;

            Sample = new LogSample(this, startTime, groups.Select(reader.GetGroup));

            InitializeSample(Sample, startTime);
        }
 protected void UpdateSampleValues(LogSample sample, int timestamp)
 {
     Sample.UpdateTime(timestamp);
     foreach (var group in sample.Groups.Values)
         ((LogSampleGroup)group).Update(timestamp, true);
 }
 protected void InitializeSample(LogSample sample, int timestamp)
 {
     Sample.UpdateTime(timestamp);
     foreach (var group in sample.Groups.Values)
         ((LogSampleGroup)group).Update(timestamp, false);
 }