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