public class RaptorHash<T>
{
private LinkedList<int> Keys;
private Hashtable Values;
private int Max;
public RaptorHash(int max)
{
Max = max;
Keys = new LinkedList<int>();
Values = new Hashtable();
}
public void Add(int key, T o)
{
if (Keys.Contains(key))
Keys.Remove(key);
Keys.AddFirst(key);
Values.Add(key, o);
if (Keys.Count > Max)
{
Values.Remove(Keys.Last);
Keys.Remove(Keys.Last);
}
}
public T Get(int key)
{
if (Keys.Contains(key))
{
Keys.Remove(key);
Keys.AddFirst(key);
return (T)Values[key];
}
return default(T);
}
public T GetFirst()
{
return (T)Values[Keys.First.Value];
}
}