예제 #1
0
        private void MoveToFront(LRUCacheEntry entry)
        {
            var node = entry.Node;
            var key  = node.Value.Key;

            list.Remove(node);

            entry.Node = list.AddFirst(node.Value);
        }
예제 #2
0
        public virtual void Put(TKey key, TData value)
        {
            if (map.TryGetValue(key, out var entry))
            {
                entry.Node.Value.Data = value;

                MoveToFront(entry);
            }
            else
            {
                var node = new LinkedListNode <LRUCacheNode>(new LRUCacheNode(key, value));

                entry = new LRUCacheEntry(node);

                list.AddFirst(node);
                map.Add(key, entry);

                EnsureCapacity();
            }
        }