Example #1
0
        public void TestReferenceMap()
        {
            var orderList = new List <Order>();

            for (var i = 0; i < 10000; i++)
            {
                orderList.Add(new Order {
                    Id = i, Name = i.ToString()
                });
            }
            var map = new ReferenceMap <Order, Bill>();

            foreach (var order in orderList)
            {
                map.Add(order, new Bill {
                    Id = order.Id, Count = order.Id
                });
            }

            foreach (var order in orderList)
            {
                Assert.True(map.ContainsKey(order));
            }

            foreach (var order in orderList)
            {
                Assert.Equal(order.Id, map[order].Id);
                Assert.Equal(order.Id, map[order].Count);
            }

            var newOrderList = new List <Order>();

            for (var i = 0; i < 10000; i++)
            {
                orderList.Add(new Order {
                    Id = i, Name = i.ToString()
                });
            }

            foreach (var order in newOrderList)
            {
                Assert.False(map.ContainsKey(order));
            }
        }
Example #2
0
        /// <summary>
        /// Returns the object to the pool. If the object is already returned to the pool, <see cref="InvalidOperationException"/> is thrown.
        /// </summary>
        /// <param name="obj">The object to return.</param>
        public void Return(T obj)
        {
            locker.EnterUpgradeableReadLock();
            try
            {
                if (!idleObjects.ContainsKey(obj))
                {
                    throw new InvalidOperationException("The object is never created by the pool.");
                }
                if (idleObjects[obj])
                {
                    throw new InvalidOperationException("The object is already returned to the pool.");
                }
                locker.EnterWriteLock();
                try
                {
                    bool localValidateOnReturn = validator.ValidateOnReturn;

                    if (localValidateOnReturn && !validator.Validate(obj))
                    {
                        DoInvalidateObject(obj);
                    }
                    else
                    {
                        objQueue.Enqueue(obj);
                        idleObjects[obj] = true;
                    }
                }
                finally
                {
                    locker.ExitWriteLock();
                }
            }
            finally
            {
                locker.ExitUpgradeableReadLock();
            }
            objectReturned.Set();
        }
Example #3
0
        public DocumentData(IEnumerable <Reference> references) : this()
        {
            if (references is null)
            {
                throw new System.ArgumentNullException(nameof(references));
            }

            foreach (var reference in references)
            {
                if (!ReferenceMap.ContainsKey(reference.Label))
                {
                    ReferenceMap.Add(reference.Label, reference);
                }
            }
        }