/// <summary> /// Add element to cache /// </summary> /// <param name="tag">The tag.</param> /// <param name="value">The value.</param> public void Add(int tag, TValue value) { if (nodePointer.ContainsKey(tag)) { MoveToFront(nodePointer[tag]); } else { CacheNode <TValue> newNode = new CacheNode <TValue>(tag, value); if (Count == m_cacheSize) { ReplaceRecentlyUsed(newNode); } else { AddToFront(newNode); } nodePointer.Add(tag, newNode); } }
/// <summary> /// Replaces the recently used. /// </summary> /// <param name="node">The node.</param> protected abstract void ReplaceRecentlyUsed(CacheNode <TValue> node);
private void MoveToFront(CacheNode <TValue> node) { node.Previous.Next = node.Next; node.Next.Previous = node.Previous; AddToFront(node); }