2 //-- ex-gen-struct-pair
3 //-- ex-gen-logging-pairs
9 private const int SIZE
= 5;
10 private static int instanceCount
= 0;
11 private int count
= 0;
12 private T
[] log
= new T
[SIZE
];
13 public Log() { instanceCount++; }
14 public static int InstanceCount { get { return instanceCount; }
}
15 public void Add(T msg
) { log[count++ % SIZE] = msg; }
16 public int Count { get { return count; }
}
18 get { // Return the last log entry, or null if nothing logged yet
19 return count
==0 ? default(T
) : log
[(count
-1)%SIZE
];
21 set { // Update the last log entry, or create one if nothing logged yet
25 log
[(count
-1)%SIZE
] = value;
30 int size
= Math
.Min(count
, SIZE
);
31 T
[] res
= new T
[size
];
32 for (int i
=0; i
<size
; i
++)
33 res
[i
] = log
[(count
-size
+i
) % SIZE
];
41 public static void Main(String
[] args
) {
42 Log
<String
> log1
= new Log
<String
>();
45 Log
<DateTime
> log2
= new Log
<DateTime
>();
46 log2
.Add(DateTime
.Now
);
47 log2
.Add(DateTime
.Now
.AddHours(1));
48 DateTime
[] dts
= log2
.All
;
49 // Printing both logs:
50 foreach (String s
in log1
.All
)
51 Console
.Write("{0} ", s
);
53 foreach (DateTime dt
in dts
)
54 Console
.Write("{0} ", dt
);
59 public static void TestPairLog() {
60 Log
<Pair
<DateTime
,String
>> log
= new Log
<Pair
<DateTime
,String
>>();
61 log
.Add(new Pair
<DateTime
,String
>(DateTime
.Now
, "Tea leaves"));
62 log
.Add(new Pair
<DateTime
,String
>(DateTime
.Now
.AddMinutes(2), "Hot water"));
63 log
.Add(new Pair
<DateTime
,String
>(DateTime
.Now
.AddMinutes(7), "Ready"));
64 Pair
<DateTime
,String
>[] allMsgs
= log
.All
;
65 foreach (Pair
<DateTime
,String
> p
in allMsgs
)
66 Console
.WriteLine("At {0}: {1}", p
.Fst
, p
.Snd
);
71 public struct Pair
<T
,U
> {
72 public readonly T Fst
;
73 public readonly U Snd
;
74 public Pair(T fst
, U snd
) {