--- /dev/null
+//-- ex-gen-logger
+//-- ex-gen-struct-pair
+//-- ex-gen-logging-pairs
+// 1.2 alpha
+
+using System;
+
+public class Log<T> {
+ private const int SIZE = 5;
+ private static int instanceCount = 0;
+ private int count = 0;
+ private T[] log = new T[SIZE];
+ public Log() { instanceCount++; }
+ public static int InstanceCount { get { return instanceCount; } }
+ public void Add(T msg) { log[count++ % SIZE] = msg; }
+ public int Count { get { return count; } }
+ public T Last {
+ get { // Return the last log entry, or null if nothing logged yet
+ return count==0 ? default(T) : log[(count-1)%SIZE];
+ }
+ set { // Update the last log entry, or create one if nothing logged yet
+ if (count==0)
+ log[count++] = value;
+ else
+ log[(count-1)%SIZE] = value;
+ }
+ }
+ public T[] All {
+ get {
+ int size = Math.Min(count, SIZE);
+ T[] res = new T[size];
+ for (int i=0; i<size; i++)
+ res[i] = log[(count-size+i) % SIZE];
+ return res;
+ }
+ }
+}
+
+class TestLog {
+ class MyTest {
+ public static void Main(String[] args) {
+ Log<String> log1 = new Log<String>();
+ log1.Add("Reboot");
+ log1.Add("Coffee");
+ Log<DateTime> log2 = new Log<DateTime>();
+ log2.Add(DateTime.Now);
+ log2.Add(DateTime.Now.AddHours(1));
+ DateTime[] dts = log2.All;
+ // Printing both logs:
+ foreach (String s in log1.All)
+ Console.Write("{0} ", s);
+ Console.WriteLine();
+ foreach (DateTime dt in dts)
+ Console.Write("{0} ", dt);
+ Console.WriteLine();
+ }
+ }
+}
gen-14 gen-15 gen-16 gen-18 gen-19 gen-20 gen-21 gen-22 gen-23 gen-24 gen-25
gen-26 gen-27 gen-28 gen-29 gen-30 gen-32 gen-33 gen-34 gen-35 gen-36 gen-37
gen-38 gen-39 gen-40 gen-41 gen-42 gen-43 gen-44 gen-45 gen-46 gen-48 gen-49
- gen-50 gen-51 gen-52 gen-53 gen-54 gen-55];
+ gen-50 gen-51 gen-52 gen-53 gen-54 gen-55 gen-56];
my @compileonly = qw[];
my @library = qw[gen-13 gen-17 gen-31 gen-47];