using AssetRipper.Assets.Collections; using AssetRipper.Assets.Metadata; using System.Collections; using System.Diagnostics; namespace AssetRipper.Assets.Generics; public abstract class AccessListBase : IList, IReadOnlyList where T : notnull { /// public abstract T this[int index] { get; set; } /// public abstract int Count { get; } /// /// The capacity of the list /// public abstract int Capacity { get; set; } [DebuggerBrowsable(DebuggerBrowsableState.Never)] bool ICollection.IsReadOnly => false; /// public abstract void Add(T item); /// /// Add a new element to the list /// public abstract T AddNew(); /// public abstract void Clear(); /// public abstract bool Contains(T item); /// public abstract void CopyTo(T[] array, int arrayIndex); public abstract int EnsureCapacity(int capacity); /// public abstract int IndexOf(T item); /// public abstract void Insert(int index, T item); /// public abstract bool Remove(T item); /// public abstract void RemoveAt(int index); /// public void RemoveAt(Index index) { RemoveAt(index.GetOffset(Count)); } /// public IEnumerator GetEnumerator() { for (int i = 0; i < Count; i++) { yield return this[i]; } } /// IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); public override string ToString() { return $"{nameof(Count)} = {Count}"; } } public static class AccessListBaseExtensions { public static PPtrAccessList ToPPtrAccessList(this AccessListBase list, AssetCollection collection) where TPPtr : IPPtr where TAsset : IUnityObjectBase { return new PPtrAccessList(list, collection); } }