A game about forced loneliness, made by TACStudios
1using System;
2using System.Collections;
3using System.Collections.Generic;
4
5namespace Unity.VisualScripting
6{
7 public class NonNullableDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IDictionary
8 {
9 public NonNullableDictionary()
10 {
11 dictionary = new Dictionary<TKey, TValue>();
12 }
13
14 public NonNullableDictionary(int capacity)
15 {
16 dictionary = new Dictionary<TKey, TValue>(capacity);
17 }
18
19 public NonNullableDictionary(IEqualityComparer<TKey> comparer)
20 {
21 dictionary = new Dictionary<TKey, TValue>(comparer);
22 }
23
24 public NonNullableDictionary(IDictionary<TKey, TValue> dictionary)
25 {
26 this.dictionary = new Dictionary<TKey, TValue>(dictionary);
27 }
28
29 public NonNullableDictionary(int capacity, IEqualityComparer<TKey> comparer)
30 {
31 dictionary = new Dictionary<TKey, TValue>(capacity, comparer);
32 }
33
34 public NonNullableDictionary(IDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer)
35 {
36 this.dictionary = new Dictionary<TKey, TValue>(dictionary, comparer);
37 }
38
39 private readonly Dictionary<TKey, TValue> dictionary;
40
41 public TValue this[TKey key]
42 {
43 get
44 {
45 return dictionary[key];
46 }
47
48 set
49 {
50 dictionary[key] = value;
51 }
52 }
53
54 object IDictionary.this[object key]
55 {
56 get
57 {
58 return ((IDictionary)dictionary)[key];
59 }
60 set
61 {
62 ((IDictionary)dictionary)[key] = value;
63 }
64 }
65
66 public int Count => dictionary.Count;
67
68 public bool IsSynchronized => ((ICollection)dictionary).IsSynchronized;
69
70 public object SyncRoot => ((ICollection)dictionary).SyncRoot;
71
72 public bool IsReadOnly => false;
73
74 public ICollection<TKey> Keys => dictionary.Keys;
75
76 ICollection IDictionary.Values => ((IDictionary)dictionary).Values;
77
78 ICollection IDictionary.Keys => ((IDictionary)dictionary).Keys;
79
80 public ICollection<TValue> Values => dictionary.Values;
81
82 public bool IsFixedSize => ((IDictionary)dictionary).IsFixedSize;
83
84 public void CopyTo(Array array, int index)
85 {
86 ((ICollection)dictionary).CopyTo(array, index);
87 }
88
89 void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> item)
90 {
91 ((ICollection<KeyValuePair<TKey, TValue>>)dictionary).Add(item);
92 }
93
94 public void Add(TKey key, TValue value)
95 {
96 if (value == null)
97 {
98 throw new ArgumentNullException(nameof(value));
99 }
100
101 dictionary.Add(key, value);
102 }
103
104 public void Add(object key, object value)
105 {
106 ((IDictionary)dictionary).Add(key, value);
107 }
108
109 public void Clear()
110 {
111 dictionary.Clear();
112 }
113
114 public bool Contains(object key)
115 {
116 return ((IDictionary)dictionary).Contains(key);
117 }
118
119 IDictionaryEnumerator IDictionary.GetEnumerator()
120 {
121 return ((IDictionary)dictionary).GetEnumerator();
122 }
123
124 public void Remove(object key)
125 {
126 ((IDictionary)dictionary).Remove(key);
127 }
128
129 bool ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue> item)
130 {
131 return ((ICollection<KeyValuePair<TKey, TValue>>)dictionary).Contains(item);
132 }
133
134 public bool ContainsKey(TKey key)
135 {
136 return dictionary.ContainsKey(key);
137 }
138
139 void ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
140 {
141 ((ICollection<KeyValuePair<TKey, TValue>>)dictionary).CopyTo(array, arrayIndex);
142 }
143
144 public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
145 {
146 return dictionary.GetEnumerator();
147 }
148
149 bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> item)
150 {
151 return ((ICollection<KeyValuePair<TKey, TValue>>)dictionary).Remove(item);
152 }
153
154 public bool Remove(TKey key)
155 {
156 return dictionary.Remove(key);
157 }
158
159 public bool TryGetValue(TKey key, out TValue value)
160 {
161 return dictionary.TryGetValue(key, out value);
162 }
163
164 IEnumerator IEnumerable.GetEnumerator()
165 {
166 return dictionary.GetEnumerator();
167 }
168 }
169}