// // Copyright (c) Adrian Conlon. All rights reserved. // namespace Fuse { using System; using System.Collections.Generic; using System.Collections.ObjectModel; public class Result where T : Fuse.IRegisterState, new() { private readonly TestEvents events = new TestEvents(); private readonly List memoryData = new List(); public string Description { get; private set; } public T RegisterState { get; } = new T(); public TestEvents Events => this.events; public ReadOnlyCollection MemoryData => this.memoryData.AsReadOnly(); public bool TryParse(Lines lines) { if (lines == null) { throw new ArgumentNullException(nameof(lines)); } while (!lines.EndOfFile && string.IsNullOrWhiteSpace(this.Description)) { this.Description = lines.ReadLine(); } if (string.IsNullOrWhiteSpace(this.Description)) { return false; } this.events.Parse(lines); this.RegisterState.Parse(lines); bool finished; do { var line = lines.ReadLine(); finished = string.IsNullOrWhiteSpace(line); if (!finished) { var datum = new MemoryDatum(); datum.Parse(line); this.memoryData.Add(datum); } } while (!finished); return true; } } }