1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using Antmicro.Renode.Time; 10 11 namespace Antmicro.Renode.EventRecording 12 { 13 internal class RecordEntry<T> : IRecordEntry 14 { RecordEntry(string name, T value, Action<T> handler, TimeInterval timestamp)15 public RecordEntry(string name, T value, Action<T> handler, TimeInterval timestamp) 16 { 17 Value = value; 18 @base = new RecordEntryBase(name, handler, timestamp); 19 } 20 Play(Func<string, Delegate, Delegate> handlerResolver)21 public void Play(Func<string, Delegate, Delegate> handlerResolver) 22 { 23 ((Action<T>)handlerResolver(Name, @base.Handler))(Value); 24 } 25 ToString()26 public override string ToString() 27 { 28 return string.Format("[RecordEntry: Base={0}, Value={1}]", @base, Value); 29 } 30 31 public T Value { get; private set; } 32 33 public string Name 34 { 35 get 36 { 37 return @base.Name; 38 } 39 } 40 41 public TimeInterval Timestamp 42 { 43 get 44 { 45 return @base.Timestamp; 46 } 47 } 48 49 private RecordEntryBase @base; 50 } 51 52 internal class RecordEntry<T1, T2> : IRecordEntry 53 { RecordEntry(string name, T1 value1, T2 value2, Action<T1, T2> handler, TimeInterval timestamp)54 public RecordEntry(string name, T1 value1, T2 value2, Action<T1, T2> handler, TimeInterval timestamp) 55 { 56 Value1 = value1; 57 Value2 = value2; 58 @base = new RecordEntryBase(name, handler, timestamp); 59 } 60 Play(Func<string, Delegate, Delegate> handlerResolver)61 public void Play(Func<string, Delegate, Delegate> handlerResolver) 62 { 63 ((Action<T1, T2>)handlerResolver(Name, @base.Handler))(Value1, Value2); 64 } 65 ToString()66 public override string ToString() 67 { 68 return string.Format("[RecordEntry: Base={0}, Value1={1}, Value2={2}]", @base, Value1, Value2); 69 } 70 71 public T1 Value1 { get; private set; } 72 public T2 Value2 { get; private set; } 73 74 public string Name 75 { 76 get 77 { 78 return @base.Name; 79 } 80 } 81 82 public TimeInterval Timestamp 83 { 84 get 85 { 86 return @base.Timestamp; 87 } 88 } 89 90 private RecordEntryBase @base; 91 } 92 } 93 94