using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using MultiTheftAuto.Utils; namespace MultiTheftAuto.Pools { public abstract class Pool : Disposable { protected static readonly List Instances = new List(); protected static ReadOnlyCollection ReadOnly = new ReadOnlyCollection( new List() ); protected static object Lock = new object(); protected Pool() { lock( Lock ) { Instances.Add( this ); ReadOnly = Instances.OfType().ToList().AsReadOnly(); } } public static ReadOnlyCollection All { get { lock( Lock ) { return ReadOnly; } } } protected override void Dispose( bool disposing ) { lock( Lock ) { Instances.Remove( this ); ReadOnly = Instances.OfType().ToList().AsReadOnly(); } } public static bool Contains( T item ) { lock( Lock ) { return Instances.Contains( item ); } } public static ReadOnlyCollection GetAll() { lock( Lock ) { return Instances.OfType().ToList().AsReadOnly(); } } } }