DoubleKeyMap`3.cs revision 324c4644fee44b9898524c09511bd33c3f12e2df
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr.Runtime.Debug.Misc 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using System.Collections.Generic; 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class DoubleKeyMap<TKey1, TKey2, TValue> 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver internal IDictionary<TKey1, IDictionary<TKey2, TValue>> data = new Dictionary<TKey1, IDictionary<TKey2, TValue>>(); 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual TValue Put(TKey1 k1, TKey2 k2, TValue v) 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDictionary<TKey2, TValue> data2; 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data.TryGetValue(k1, out data2); 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TValue prev = default(TValue); 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (data2 == null) 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data2 = new Dictionary<TKey2, TValue>(); 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data[k1]=data2; 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data2.TryGetValue(k2, out prev); 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data2[k2]= v; 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return prev; 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual TValue Get(TKey1 k1, TKey2 k2) 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDictionary<TKey2, TValue> data2; 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data.TryGetValue(k1, out data2); 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (data2 == null) 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return default(TValue); 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TValue value; 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data2.TryGetValue(k2, out value); 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return value; 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual IDictionary<TKey2, TValue> Get(TKey1 k1) 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDictionary<TKey2, TValue> value; 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data.TryGetValue(k1, out value); 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return value; 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Get all values associated with primary key */ 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual ICollection<TValue> Values(TKey1 k1) 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDictionary<TKey2, TValue> data2; 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data.TryGetValue(k1, out data2); 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (data2 == null) 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return null; 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return data2.Values; 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** get all primary keys */ 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual ICollection<TKey1> KeySet() 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return data.Keys; 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** get all secondary keys associated with a primary key */ 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual ICollection<TKey2> KeySet(TKey1 k1) 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDictionary<TKey2, TValue> data2; 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data.TryGetValue(k1, out data2); 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (data2 == null) 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return null; 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return data2.Keys; 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual ICollection<TValue> Values() 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Dictionary<TValue, bool> s = new Dictionary<TValue, bool>(); 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver foreach (IDictionary<TKey2, TValue> k2 in data.Values) 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver foreach (TValue v in k2.Values) 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver s[v] = true; 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return s.Keys; 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 87