Development Merge 2025.10.18 #4
@@ -8,13 +8,25 @@ public class FastList<T> : IList<T>, IReadOnlyList<T>, IEnumerable<T> where T :
 | 
				
			|||||||
    private readonly List<T> items = [];
 | 
					    private readonly List<T> items = [];
 | 
				
			||||||
    private readonly Dictionary<T, int> indexMap = [];
 | 
					    private readonly Dictionary<T, int> indexMap = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public int Count => items.Count;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public bool IsReadOnly { get; set; } = false;
 | 
					    public bool IsReadOnly { get; set; } = false;
 | 
				
			||||||
    public T this[int index] { get => items[index]; set => items[index] = value; }
 | 
					    public int Count => items.Count;
 | 
				
			||||||
 | 
					    public T this[int index]
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        get => items[index];
 | 
				
			||||||
 | 
					        set
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (IsReadOnly)
 | 
				
			||||||
 | 
					                throw new System.Data.ReadOnlyException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            items[index] = value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void Add(T item)
 | 
					    public void Add(T item)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        if (IsReadOnly)
 | 
				
			||||||
 | 
					            throw new System.Data.ReadOnlyException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        indexMap[item] = items.Count;
 | 
					        indexMap[item] = items.Count;
 | 
				
			||||||
        items.Add(item);
 | 
					        items.Add(item);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -22,6 +34,9 @@ public class FastList<T> : IList<T>, IReadOnlyList<T>, IEnumerable<T> where T :
 | 
				
			|||||||
    public void RemoveAt(int i) => Remove(items[i], i);
 | 
					    public void RemoveAt(int i) => Remove(items[i], i);
 | 
				
			||||||
    public bool Remove(T item)
 | 
					    public bool Remove(T item)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        if (IsReadOnly)
 | 
				
			||||||
 | 
					            throw new System.Data.ReadOnlyException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!indexMap.TryGetValue(item, out int index))
 | 
					        if (!indexMap.TryGetValue(item, out int index))
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,6 +59,9 @@ public class FastList<T> : IList<T>, IReadOnlyList<T>, IEnumerable<T> where T :
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public void Insert(int index, T item)
 | 
					    public void Insert(int index, T item)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        if (IsReadOnly)
 | 
				
			||||||
 | 
					            throw new System.Data.ReadOnlyException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        items.Insert(index, item);
 | 
					        items.Insert(index, item);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (int i = index; i < items.Count; i++)
 | 
					        for (int i = index; i < items.Count; i++)
 | 
				
			||||||
@@ -52,22 +70,28 @@ public class FastList<T> : IList<T>, IReadOnlyList<T>, IEnumerable<T> where T :
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public void Clear()
 | 
					    public void Clear()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        if (IsReadOnly)
 | 
				
			||||||
 | 
					            throw new System.Data.ReadOnlyException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        items.Clear();
 | 
					        items.Clear();
 | 
				
			||||||
        indexMap.Clear();
 | 
					        indexMap.Clear();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public bool Contains(T item) => indexMap.ContainsKey(item);
 | 
					    public bool Contains(T item) => indexMap.ContainsKey(item);
 | 
				
			||||||
 | 
					    public int IndexOf(T item) => items.IndexOf(item);
 | 
				
			||||||
    public int BinarySearch(T item, IComparer<T>? comparer = null) => items.BinarySearch(item, comparer);
 | 
					    public int BinarySearch(T item, IComparer<T>? comparer = null) => items.BinarySearch(item, comparer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void Sort(IComparer<T> comparer)
 | 
					    public void Sort(IComparer<T> comparer)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        if (IsReadOnly)
 | 
				
			||||||
 | 
					            throw new System.Data.ReadOnlyException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        items.Sort(comparer);
 | 
					        items.Sort(comparer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (int i = 0; i < items.Count; i++)
 | 
					        for (int i = 0; i < items.Count; i++)
 | 
				
			||||||
            indexMap[items[i]] = i;
 | 
					            indexMap[items[i]] = i;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public int IndexOf(T item) => items.IndexOf(item);
 | 
					 | 
				
			||||||
    public void CopyTo(T[] array, int arrayIndex) => items.CopyTo(array, arrayIndex);
 | 
					    public void CopyTo(T[] array, int arrayIndex) => items.CopyTo(array, arrayIndex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public IEnumerator<T> GetEnumerator() => items.GetEnumerator();
 | 
					    public IEnumerator<T> GetEnumerator() => items.GetEnumerator();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user