// Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. #if !NET_4_6 using System.Collections.Generic; namespace System.Linq.Expressions.Reimplement { /// /// A simple hashset, built on Dictionary{K, V} /// internal sealed class Set : ICollection { private readonly Dictionary _data; internal Set() { _data = new Dictionary(); } internal Set(IEqualityComparer comparer) { _data = new Dictionary(comparer); } internal Set(IList list) { _data = new Dictionary(list.Count); foreach (var t in list) { Add(t); } } internal Set(IEnumerable list) { _data = new Dictionary(); foreach (var t in list) { Add(t); } } internal Set(int capacity) { _data = new Dictionary(capacity); } public void Add(T item) { _data[item] = null; } public void Clear() { _data.Clear(); } public bool Contains(T item) { return _data.ContainsKey(item); } public void CopyTo(T[] array, int arrayIndex) { _data.Keys.CopyTo(array, arrayIndex); } public int Count { get { return _data.Count; } } public bool IsReadOnly { get { return false; } } public bool Remove(T item) { return _data.Remove(item); } public IEnumerator GetEnumerator() { return _data.Keys.GetEnumerator(); } Collections.IEnumerator Collections.IEnumerable.GetEnumerator() { return _data.Keys.GetEnumerator(); } } } #endif