Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

77 lines
2.2 KiB
C#

//-- 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 {
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();
TestPairLog();
}
public static void TestPairLog() {
Log<Pair<DateTime,String>> log = new Log<Pair<DateTime,String>>();
log.Add(new Pair<DateTime,String>(DateTime.Now, "Tea leaves"));
log.Add(new Pair<DateTime,String>(DateTime.Now.AddMinutes(2), "Hot water"));
log.Add(new Pair<DateTime,String>(DateTime.Now.AddMinutes(7), "Ready"));
Pair<DateTime,String>[] allMsgs = log.All;
foreach (Pair<DateTime,String> p in allMsgs)
Console.WriteLine("At {0}: {1}", p.Fst, p.Snd);
}
}
public struct Pair<T,U> {
public readonly T Fst;
public readonly U Snd;
public Pair(T fst, U snd) {
this.Fst = fst;
this.Snd = snd;
}
}