using System; using System.Collections; using System.Collections.Generic; namespace Unity.HLODSystem.Utils { public class DisposableDictionary : IDisposable, IDictionary where TValue:IDisposable { private Dictionary m_dic = new Dictionary(); public void Dispose() { foreach (var value in m_dic.Values) { value.Dispose(); } m_dic.Clear(); } public IEnumerator> GetEnumerator() { return ((IDictionary) m_dic).GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public void Add(KeyValuePair item) { ((IDictionary) m_dic).Add(item); } public void Clear() { ((IDictionary) m_dic).Clear(); } public bool Contains(KeyValuePair item) { return ((IDictionary) m_dic).Contains(item); } public void CopyTo(KeyValuePair[] array, int arrayIndex) { ((IDictionary) m_dic).CopyTo(array, arrayIndex); } public bool Remove(KeyValuePair item) { return ((IDictionary) m_dic).Remove(item); } public int Count { get => ((IDictionary) m_dic).Count; } public bool IsReadOnly { get => ((IDictionary) m_dic).IsReadOnly; } public void Add(TKey key, TValue value) { ((IDictionary) m_dic).Add(key, value); } public bool ContainsKey(TKey key) { return ((IDictionary) m_dic).ContainsKey(key); } public bool Remove(TKey key) { return ((IDictionary) m_dic).Remove(key); } public bool TryGetValue(TKey key, out TValue value) { return ((IDictionary) m_dic).TryGetValue(key, out value); } public TValue this[TKey key] { get => ((IDictionary) m_dic)[key]; set => ((IDictionary) m_dic)[key] = value; } public ICollection Keys { get => ((IDictionary) m_dic).Keys; } public ICollection Values { get => ((IDictionary) m_dic).Values; } } }