Exemple #1
0
        /// <summary>
        ///     Creates the <see cref="ItemStore" /> based on the given <see cref="EPoolItemAccessMode" />
        /// </summary>
        /// <param name="mode"></param>
        /// <param name="capacity"></param>
        /// <returns></returns>
        protected IPoolItemStore <T> CreateItemStore(EPoolItemAccessMode mode, int capacity)
        {
            switch (mode)
            {
            case EPoolItemAccessMode.Fifo:
                return(new QueuePoolItemStore <T>(capacity));

            case EPoolItemAccessMode.Lifo:
                return(new StackPoolItemStore <T>(capacity));

            default:
                Debug.Assert(mode == EPoolItemAccessMode.Circular, "Invalid AccessMode in CreateItemStore");
                return(new CircularStore <T>(capacity));
            }
        }
Exemple #2
0
        protected AbstractPool(int poolSize, Func <IPool <T>, T> itemFactoryFunc, EPoolItemAccessMode accessMode = EPoolItemAccessMode.Fifo)
        {
            if (poolSize <= 0)
            {
                throw new ArgumentOutOfRangeException("poolSize", poolSize, "Size of the pool must be greater than zero.");
            }
            if (itemFactoryFunc == null)
            {
                throw new ArgumentNullException("itemFactoryFunc");
            }

            _sync = new Semaphore(poolSize, poolSize);

            PoolSize        = poolSize;
            ItemFactoryFunc = itemFactoryFunc;
            ItemStore       = CreateItemStore(accessMode, poolSize);
        }
Exemple #3
0
 public LazyPool(int poolSize, Func <IPool <T>, T> itemFactoryFunc, EPoolItemAccessMode accessMode = EPoolItemAccessMode.Fifo)
     : base(poolSize, itemFactoryFunc, accessMode)
 {
 }
Exemple #4
0
 public EagerPool(int poolSize, Func <IPool <T>, T> itemFactoryFunc, EPoolItemAccessMode accessMode = EPoolItemAccessMode.Fifo)
     : base(poolSize, itemFactoryFunc, accessMode)
 {
     PreloadItems();
 }