using System; using System.Collections; using System.Collections.Generic; using System.IO; namespace AssetStudio { public interface IObjChild { dynamic Parent { get; set; } } public abstract class ObjChildren<T> : IEnumerable<T> where T : IObjChild { protected List<T> children; public T this[int i] => children[i]; public int Count => children.Count; public void InitChildren(int count) { children = new List<T>(count); } public void AddChild(T obj) { children.Add(obj); obj.Parent = this; } public void InsertChild(int i, T obj) { children.Insert(i, obj); obj.Parent = this; } public void RemoveChild(T obj) { obj.Parent = null; children.Remove(obj); } public void RemoveChild(int i) { children[i].Parent = null; children.RemoveAt(i); } public int IndexOf(T obj) { return children.IndexOf(obj); } public IEnumerator<T> GetEnumerator() { return children.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }