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}