/* **************************************************************************** * * Copyright (c) Microsoft Corporation. * * This source code is subject to terms and conditions of the Microsoft Public License. A * copy of the license can be found in the License.html file at the root of this distribution. If * you cannot locate the Microsoft Public License, please send an email to * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound * by the terms of the Microsoft Public License. * * You must not remove this notice, or any other, from this software. * * * ***************************************************************************/ using System.Collections; using System.Collections.Generic; namespace Dlrsoft.VBScript.Compiler { /// /// 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 (T t in list) { Add(t); } } internal Set(IEnumerable list) { _data = new Dictionary(); foreach (T 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(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return _data.Keys.GetEnumerator(); } } }