#if FAT using System; using System.Collections.Generic; using System.Linq; namespace LinqInternal.Collections.Specialized { internal sealed class OrderedCollection : ICollection, IExtendedCollection { private readonly ExtendedReadOnlyCollection _readOnly; private int _count; private AVLTree _data; public OrderedCollection() { _data = new AVLTree(); _readOnly = new ExtendedReadOnlyCollection(this); } public OrderedCollection(IComparer comparer) { _data = new AVLTree(comparer); _readOnly = new ExtendedReadOnlyCollection(this); } public OrderedCollection(Comparison comparison) { _data = new AVLTree(comparison); _readOnly = new ExtendedReadOnlyCollection(this); } public IReadOnlyCollection AsReadOnly { get { return _readOnly; } } public int Count { get { return _count; } } bool ICollection.IsReadOnly { get { return false; } } public void Add(T item) { _data.Add(item, item); _count++; } public void Clear() { _data = null; _count = 0; } public bool Contains(T item) { return _data.Get(item) != null; } public bool Contains(T item, IEqualityComparer comparer) { return Enumerable.Contains(this, item, comparer); } public void CopyTo(T[] array, int arrayIndex) { Extensions.CanCopyTo(Count, array, arrayIndex); Extensions.CopyTo(this, array, arrayIndex); } public void CopyTo(T[] array) { Extensions.CanCopyTo(Count, array); Extensions.CopyTo(this, array); } public void CopyTo(T[] array, int arrayIndex, int countLimit) { Extensions.CanCopyTo(array, arrayIndex, countLimit); Extensions.CopyTo(this, array, arrayIndex, countLimit); } public IEnumerator GetEnumerator() { return _data.ConvertProgressive(input => input.Key).GetEnumerator(); } public bool Remove(T item) { if (_data.Remove(item)) { _count--; return true; } else { return false; } } public bool Remove(T item, IEqualityComparer comparer) { if (Extensions.Remove(this, item, comparer)) { _count--; return true; } else { return false; } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } } } #endif