You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics;
namespace SemiColinGames { // An IList<T>, backed by a List<T>, that prints out a debug message any time that the Capacity
// of the underlying List changes.
public class ProfilingList<T> : IList<T> { private readonly List<T> items; private readonly string name; private int previousCapacity;
public ProfilingList(int capacity, string name) { items = new List<T>(capacity); previousCapacity = capacity; this.name = name; }
public bool IsReadOnly { get { return false; } }
public void Add(T item) { items.Add(item); CheckCapacity(); }
public void Insert(int index, T item) { items.Insert(index, item); CheckCapacity(); }
[Conditional("DEBUG")] private void CheckCapacity() { if (items.Capacity != previousCapacity) { Debug.WriteLine($"ProfilingList {name} capacity: {previousCapacity} -> {items.Capacity}"); previousCapacity = items.Capacity; } }
// Everything below this point is boilerplate delegation to the underlying list.
public void Clear() { items.Clear(); }
public bool Contains(T item) { return items.Contains(item); }
public int Count { get => items.Count; }
public int IndexOf(T item) { return items.IndexOf(item); }
public bool Remove(T item) { return items.Remove(item); }
public int RemoveAll(Predicate<T> match) { return items.RemoveAll(match); }
public void CopyTo(T[] array, int arrayIndex) { items.CopyTo(array, arrayIndex); }
public void RemoveAt(int index) { items.RemoveAt(index); }
public T this[int index] { get { return items[index]; } set { items[index] = value; } }
public IEnumerator<T> GetEnumerator() { return items.GetEnumerator(); }
IEnumerator IEnumerable.GetEnumerator() { return items.GetEnumerator(); } } }
|