private void TryMoveUp(LfuItem lfuItem)
    {
        if (lfuItem.Prev == null || lfuItem.Prev.UseCount >= lfuItem.UseCount)     // maybe > if you want LRU and LFU
        {
            return;
        }
        var prev = lfuItem.Prev;

        prev.Next    = lfuItem.Next;
        lfuItem.Prev = prev.Prev;
        prev.Prev    = lfuItem;
        if (lfuItem.Prev == null)
        {
            this._first = lfuItem;
        }
    }
    public void Add(TKey key, TValue value)
    {
        var lfuItem = new LfuItem {
            Value = value, Prev = this._last
        };

        this._items.Add(key, lfuItem);
        if (this._last != null)
        {
            this._last.Next = lfuItem;
        }

        this._last = lfuItem;

        if (this._first == null)
        {
            this._first = lfuItem;
        }
    }
Example #3
0