예제 #1
0
        public override bool Get(ref T t)
        {
            var result = false;
            LinkedListNode <T> rNode;
            T temp;

            if (LruFunction.SearchData <T, TK, TV>(mLink, t.Key, out rNode))
            {
                LruFunction.Sort(mLink, rNode);
                result = true;
            }
            else if (LruFunction.SearchQueue <T, TK, TV>(mHisQueue, t.Key, out temp))
            {
                mHisQueue.Enqueue(temp);
                t      = temp;
                result = true;
            }
            return(result);
        }
예제 #2
0
        public override void Set(T t)
        {
            T temp;

            if (LruFunction.SearchQueue <T, TK, TV>(mHisQueue, t.Key, out temp))
            {
                while (mLink.Count > Cap)
                {
                    mLink.RemoveLast();
                }
                mLink.AddFirst(t);
            }
            else
            {
                while (mHisQueue.Count > CapHistory)
                {
                    mHisQueue.Dequeue();
                }
                mHisQueue.Enqueue(t);
            }
        }