Home
Manage Your Code
Snippet: QueueDictionary (C#)
Title: QueueDictionary Language: C#
Description: Queue Dictionary Views: 359
Author: ram yadav Date Added: 3/21/2007
Copy Code  
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace MyNameSpace
6{
7    public class QueueDictionary<TKey, TValue> : Dictionary<TKey, TValue>
8    {
9        private Queue<TKey> innerQueue = new Queue<TKey>();
10        private object padlock = new object();
11
12        public QueueDictionary()
13            : base()
14        {
15        }
16
17        new public void Add(TKey key, TValue value)
18        {
19            lock (padlock)
20            {
21                base.Add(key, value);
22                innerQueue.Enqueue(key);
23            }
24        }
25
26        new public bool Remove(TKey key)
27        {
28            lock (padlock)
29            {
30                return base.Remove(key);
31            }
32        }
33
34        public TValue Peek()
35        {
36            lock (padlock)
37            {
38                if (innerQueue.Count == 0)
39                    return default(TValue);
40
41                TKey key = innerQueue.Peek();
42                while (innerQueue.Count > 0 && !base.ContainsKey(key))
43                {
44                    innerQueue.Dequeue();
45                    key = innerQueue.Peek();
46                }
47
48                return base.ContainsKey(key) ? base[key] : default(TValue);
49            }
50        }
51
52        public TValue Dequeue()
53        {
54            lock (padlock)
55            {
56                if (innerQueue.Count == 0)
57                    return default(TValue);
58
59                TKey key = innerQueue.Dequeue();
60                while (innerQueue.Count > 0 && !base.ContainsKey(key))
61                {
62                    key = innerQueue.Dequeue();
63                }
64
65                if (base.ContainsKey(key))
66                {
67                    TValue ret = base[key];
68                    base.Remove(key);
69                    return ret;
70                }
71                else
72                {
73                    return default(TValue);
74                }
75            }
76        }
77    }
78
79}
80