public void Remove(LruListItem <TKey, TValue> item) { if (Head == item || Tail == item) { if (Head == item) { Head = item.Next; if (Head != null) { Head.Previous = null; } } if (Tail == item) { Tail = item.Previous; if (Tail != null) { Tail.Next = null; } } } else { item.Previous.Next = item.Next; item.Next.Previous = item.Previous; } item.Previous = null; item.Next = null; }
public void Add(LruListItem <TKey, TValue> item) { if (Head == null) { Head = item; Tail = item; item.Previous = null; item.Next = null; } else { Head.Previous = item; item.Next = Head; item.Previous = null; Head = item; } }
public void Add(LruListItem <TKey, TValue> item) { if (Head == null) { Head = item; Tail = item; item.Previous = null; item.Next = null; } else { Head.Previous = item; item.Next = Head; item.Previous = null; Head = item; } #pragma warning disable CS0618 // Type or member is obsolete item.LastTouchedTimestamp = AWSSDKUtils.CorrectedUtcNow; #pragma warning restore CS0618 // Type or member is obsolete }
public void AddOrUpdate(TKey key, TValue value) { lock (cacheLock) { if (cache.TryGetValue(key, out LruListItem <TKey, TValue> value2)) { value2.Value = value; lruList.Touch(value2); } else { LruListItem <TKey, TValue> lruListItem = new LruListItem <TKey, TValue>(key, value); while (cache.Count >= MaxEntries) { cache.Remove(lruList.EvictOldest()); } lruList.Add(lruListItem); cache.Add(key, lruListItem); } } }
/// <summary> /// Add the key/value pair to the cache, or update /// the value if the key already exists. /// /// If the cache is full, evicts the least recently used item. /// </summary> /// <param name="key"></param> /// <param name="value"></param> public void AddOrUpdate(TKey key, TValue value) { lock (cacheLock) { LruListItem <TKey, TValue> existingLruListItem; if (cache.TryGetValue(key, out existingLruListItem)) { // update existingLruListItem.Value = value; lruList.Touch(existingLruListItem); } else { // add var newLruListItem = new LruListItem <TKey, TValue>(key, value); while (cache.Count >= MaxEntries) { cache.Remove(lruList.EvictOldest()); } lruList.Add(newLruListItem); cache.Add(key, newLruListItem); } } }
internal void Clear() { Head = null; Tail = null; }
public void Touch(LruListItem <TKey, TValue> item) { Remove(item); Add(item); }