コード例 #1
0
ファイル: LruCache.cs プロジェクト: aws/aws-sdk-unity-net
        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;
        }
コード例 #2
0
ファイル: LruCache.cs プロジェクト: aws/aws-sdk-unity-net
 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;
     }
 }
コード例 #3
0
        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
        }
コード例 #4
0
 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);
         }
     }
 }
コード例 #5
0
ファイル: LruCache.cs プロジェクト: aws/aws-sdk-unity-net
 /// <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);
         }
     }
 }
コード例 #6
0
ファイル: LruCache.cs プロジェクト: aws/aws-sdk-unity-net
 internal void Clear()
 {
     Head = null;
     Tail = null;
 }
コード例 #7
0
ファイル: LruCache.cs プロジェクト: aws/aws-sdk-unity-net
 public void Touch(LruListItem <TKey, TValue> item)
 {
     Remove(item);
     Add(item);
 }