/// <summary> /// Конструктор PrioritizedElementsContainer /// </summary> /// <param name="comparer">Объект для сравнения элементов</param> public PrioritizedElementsContainer(PoolElementComparer <T> comparer) { Contract.Requires <ArgumentNullException>(comparer != null); _allElements = new SparceArrayStorage <PoolElementWrapper <T> >(true); _comparer = comparer; _occupiedElements = new SemaphoreLight(0); _syncObject = new object(); }
/// <summary> /// Конструктор PrioritizedElementsContainer /// </summary> /// <param name="comparer">Объект для сравнения элементов</param> public PrioritizedElementsContainer(PoolElementComparer <T> comparer) { if (comparer == null) { throw new ArgumentNullException(nameof(comparer)); } _allElements = new SparceArrayStorage <PoolElementWrapper <T> >(true); _comparer = comparer; _occupiedElements = new SemaphoreLight(0); _syncObject = new object(); }
/// <summary> /// <see cref="BalancingStaticPoolManager{TElem}"/> constructor /// </summary> /// <param name="comparer">Comparer which will be used to select the best element from pool</param> /// <param name="name">Name for the current <see cref="BalancingStaticPoolManager{TElem}"/> instance</param> /// <param name="destroyAction">The action that will be performed to destroy each element after removal ('null' means no action)</param> public BalancingStaticPoolManager(PoolElementComparer <TElem> comparer, string name, Action <TElem> destroyAction) { _name = name ?? this.GetType().GetCSFullName(); _destroyAction = destroyAction; _comparer = comparer ?? PoolElementComparer <TElem> .CreateDefault(); _elementsContainer = new PrioritizedElementsContainer <TElem>(_comparer); _stoppedEvent = new ManualResetEventSlim(false); _disposeCancellation = new CancellationTokenSource(); Profiling.Profiler.ObjectPoolCreated(this.Name); }
/// <summary> /// <see cref="BalancingStaticPoolManager{TElem}"/> constructor /// </summary> /// <param name="comparer">Comparer which will be used to select the best element from pool</param> /// <param name="name">Name for the current <see cref="BalancingStaticPoolManager{TElem}"/> instance</param> /// <param name="disposeElementOnDestroy">Whether the <see cref="IDisposable.Dispose"/> should be called for element after removal</param> public BalancingStaticPoolManager(IComparer <TElem> comparer, string name, bool disposeElementOnDestroy) : this(PoolElementComparer <TElem> .Wrap(comparer), name, disposeElementOnDestroy ? new Action <TElem>(CallElementDispose) : null) { }
/// <summary> /// <see cref="BalancingStaticPoolManager{TElem}"/> constructor /// </summary> /// <param name="comparer">Comparer which will be used to select the best element from pool</param> /// <param name="name">Name for the current <see cref="BalancingStaticPoolManager{TElem}"/> instance</param> /// <param name="destroyAction">The action that will be performed to destroy each element after removal ('null' means no action)</param> public BalancingStaticPoolManager(IComparer <TElem> comparer, string name, Action <TElem> destroyAction) : this(PoolElementComparer <TElem> .Wrap(comparer), name, destroyAction) { }
/// <summary> /// <see cref="BalancingStaticPoolManager{TElem}"/> constructor /// </summary> public BalancingStaticPoolManager() : this(PoolElementComparer <TElem> .CreateDefault(), null, null) { }
/// <summary> /// <see cref="BalancingStaticPoolManager{TElem}"/> constructor /// </summary> /// <param name="comparer">Comparer which will be used to select the best element from pool</param> /// <param name="name">Name for the current <see cref="BalancingStaticPoolManager{TElem}"/> instance</param> public BalancingStaticPoolManager(IComparer <TElem> comparer, string name) : this(PoolElementComparer <TElem> .Wrap(comparer), name, null) { }