aboutsummaryrefslogtreecommitdiff
path: root/runtime/CSharp2/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/DoubleKeyMap.cs
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/CSharp2/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/DoubleKeyMap.cs')
-rw-r--r--runtime/CSharp2/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/DoubleKeyMap.cs75
1 files changed, 75 insertions, 0 deletions
diff --git a/runtime/CSharp2/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/DoubleKeyMap.cs b/runtime/CSharp2/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/DoubleKeyMap.cs
new file mode 100644
index 0000000..78df131
--- /dev/null
+++ b/runtime/CSharp2/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/DoubleKeyMap.cs
@@ -0,0 +1,75 @@
+// Note to JL: Changed Hashset to List
+
+namespace Antlr.Runtime.Debug.Misc {
+ using System.Collections.Generic;
+
+ public class DoubleKeyMap<TKey1, TKey2, TValue> {
+ internal IDictionary<TKey1, IDictionary<TKey2, TValue>> data = new Dictionary<TKey1, IDictionary<TKey2, TValue>>();
+
+ public virtual TValue Put(TKey1 k1, TKey2 k2, TValue v) {
+ IDictionary<TKey2, TValue> data2;
+ data.TryGetValue(k1, out data2);
+ TValue prev = default(TValue);
+ if (data2 == null) {
+ data2 = new Dictionary<TKey2, TValue>();
+ data[k1] = data2;
+ } else {
+ data2.TryGetValue(k2, out prev);
+ }
+ data2[k2] = v;
+ return prev;
+ }
+
+ public virtual TValue Get(TKey1 k1, TKey2 k2) {
+ IDictionary<TKey2, TValue> data2;
+ data.TryGetValue(k1, out data2);
+ if (data2 == null)
+ return default(TValue);
+
+ TValue value;
+ data2.TryGetValue(k2, out value);
+ return value;
+ }
+
+ public virtual IDictionary<TKey2, TValue> Get(TKey1 k1) {
+ IDictionary<TKey2, TValue> value;
+ data.TryGetValue(k1, out value);
+ return value;
+ }
+
+ /** Get all values associated with primary key */
+ public virtual ICollection<TValue> Values(TKey1 k1) {
+ IDictionary<TKey2, TValue> data2;
+ data.TryGetValue(k1, out data2);
+ if (data2 == null)
+ return null;
+
+ return data2.Values;
+ }
+
+ /** get all primary keys */
+ public virtual ICollection<TKey1> KeySet() {
+ return data.Keys;
+ }
+
+ /** get all secondary keys associated with a primary key */
+ public virtual ICollection<TKey2> KeySet(TKey1 k1) {
+ IDictionary<TKey2, TValue> data2;
+ data.TryGetValue(k1, out data2);
+ if (data2 == null)
+ return null;
+
+ return data2.Keys;
+ }
+
+ public virtual ICollection<TValue> Values() {
+ List<TValue> s = new List<TValue>();
+ foreach (IDictionary<TKey2, TValue> k2 in data.Values) {
+ foreach (TValue v in k2.Values) {
+ s.Add(v);
+ }
+ }
+ return s;
+ }
+ }
+}