wasSharp

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 22  →  ?path2? @ 23
/Collections/Specialized/MultiKeyDictionary.cs
@@ -29,15 +29,8 @@
}
}
 
public new IEnumerable<V> Values
{
get
{
return from baseDict in base.Values
from baseKey in baseDict.Keys
select baseDict[baseKey];
}
}
public new IEnumerable<V> Values =>
base.Values.SelectMany(baseDict => baseDict.Keys, (baseDict, baseKey) => baseDict[baseKey]);
 
public void Add(K1 key1, K2 key2, V value)
{
@@ -46,10 +39,29 @@
this[key1][key2] = value;
}
 
public void Remove(K1 key1, K2 key2)
{
if (!ContainsKey(key1) || !this[key1].ContainsKey(key2))
return;
this[key1].Remove(key2);
Remove(key1);
}
 
public bool ContainsKey(K1 key1, K2 key2)
{
return base.ContainsKey(key1) && this[key1].ContainsKey(key2);
return ContainsKey(key1) && this[key1].ContainsKey(key2);
}
 
public bool TryGetValue(K1 key1, K2 key2, out V value)
{
if (!ContainsKey(key1) || !this[key1].ContainsKey(key2))
{
value = default(V);
return false;
}
value = base[key1][key2];
return true;
}
}
 
public class MultiKeyDictionary<K1, K2, K3, V> : Dictionary<K1, MultiKeyDictionary<K2, K3, V>>
@@ -67,8 +79,35 @@
 
public bool ContainsKey(K1 key1, K2 key2, K3 key3)
{
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3);
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3);
}
 
public void Add(K1 key1, K2 key2, K3 key3, V value)
{
if (!ContainsKey(key1))
this[key1] = new MultiKeyDictionary<K2, K3, V>();
this[key1][key2, key3] = value;
}
 
public void Remove(K1 key1, K2 key2, K3 key3)
{
if (!ContainsKey(key1) || !this[key1].ContainsKey(key2, key3))
return;
this[key1][key2].Remove(key3);
this[key1].Remove(key2);
Remove(key1);
}
 
public bool TryGetValue(K1 key1, K2 key2, K3 key3, out V value)
{
if (!ContainsKey(key1) || !this[key1].ContainsKey(key2, key3))
{
value = default(V);
return false;
}
value = base[key1][key2, key3];
return true;
}
}
 
public class MultiKeyDictionary<K1, K2, K3, K4, V> : Dictionary<K1, MultiKeyDictionary<K2, K3, K4, V>>
@@ -86,7 +125,7 @@
 
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4)
{
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4);
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4);
}
}
 
@@ -105,7 +144,7 @@
 
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5)
{
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5);
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5);
}
}
 
@@ -125,7 +164,7 @@
 
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6)
{
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6);
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6);
}
}
 
@@ -145,7 +184,7 @@
 
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7)
{
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7);
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7);
}
}
 
@@ -165,7 +204,7 @@
 
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7, K8 key8)
{
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8);
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8);
}
}
 
@@ -185,7 +224,7 @@
 
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7, K8 key8, K9 key9)
{
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8, key9);
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8, key9);
}
}
 
@@ -209,7 +248,7 @@
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7, K8 key8, K9 key9,
K10 key10)
{
return base.ContainsKey(key1) &&
return ContainsKey(key1) &&
this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8, key9, key10);
}
}
@@ -237,7 +276,7 @@
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7, K8 key8, K9 key9,
K10 key10, K11 key11)
{
return base.ContainsKey(key1) &&
return ContainsKey(key1) &&
this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8, key9, key10, key11);
}
}