14using System.Collections.Generic;
20 private readonly Dictionary<TKey, Node> entries;
21 private readonly
int capacity;
27 public Node Next {
get;
set; }
28 public Node Previous {
get;
set; }
29 public TKey Key {
get;
set; }
30 public TValue Value {
get;
set; }
37 throw new ArgumentOutOfRangeException(
39 "Capacity should be greater than zero");
40 this.capacity = capacity;
41 entries =
new Dictionary<TKey, Node>();
47 public void Set(TKey key, TValue value)
50 if (!entries.TryGetValue(key, out entry))
52 entry =
new Node { Key = key, Value = value };
53 if (entries.Count == capacity)
55 entries.Remove(tail.Key);
60 entries.Add(key, entry);
69 public bool TryGetValue(TKey key, out TValue value)
71 value =
default(TValue);
73 if (!entries.TryGetValue(key, out entry))
83 #region private method
84 private void MoveToHead(Node entry)
86 if (entry == head || entry ==
null)
89 var next = entry.Next;
90 var previous = entry.Previous;
93 next.Previous = entry.Previous;
96 previous.Next = entry.Next;
98 entry.Previous =
null;
102 head.Previous = entry;