Amib.Threading.Internal.PriorityQueue.Enqueue C# (CSharp) Method

Enqueue() public method

Enqueue a work item.
public Enqueue ( IHasWorkItemPriority workItem ) : void
workItem IHasWorkItemPriority A work item
return void
        public void Enqueue(IHasWorkItemPriority workItem)
        {
            Debug.Assert(null != workItem);

            int queueIndex = _queuesCount-(int)workItem.WorkItemPriority-1;
            Debug.Assert(queueIndex >= 0);
            Debug.Assert(queueIndex < _queuesCount);

            _queues[queueIndex].Enqueue(workItem);
            ++_workItemsCount;
            ++_version;
        }

Usage Example

        public void MultipleWorkItemsMultiplePriorities()
        {
            // Get all the available priorities
            WorkItemPriority [] priorities = Enum.GetValues(typeof(WorkItemPriority)) as WorkItemPriority [];

            // Create an array of priority items
            PriorityItem [] priorityItems = new PriorityItem[priorities.Length];

            // Create a priority item for each priority
            int i = priorities.Length;
            foreach(WorkItemPriority workItemPriority in priorities)
            {
                --i;
                priorityItems[i] = new PriorityItem(workItemPriority);
            }

            // Create a PermutationGenerator for the priority items
            PermutationGenerator permutations = new PermutationGenerator(priorityItems);

            int count = 0;
            // Iterate over the permutations
            foreach(object [] permutation in permutations)
            {
                ++count;
                Console.Write("Permutation #" + count + " : ");
                for(int j = 0; j < permutation.Length; ++j)
                {
                    PriorityItem pi = permutation[j] as PriorityItem;
                    Console.Write(pi.WorkItemPriority + ", ");
                }
                Console.WriteLine();
                // Create a priority queue
                PriorityQueue pq = new PriorityQueue();

                // Enqueue each priority item according to the permutation
                for(i = 0; i < permutation.Length; ++i)
                {
                    PriorityItem priorityItem = permutation[i] as PriorityItem;
                    pq.Enqueue(priorityItem);
                }

                // Make sure all the priority items are in the queue
                Assert.AreEqual(priorityItems.Length, pq.Count);

                // Compare the order of the priority items
                for(i = 0; i < priorityItems.Length; ++i)
                {
                    PriorityItem priorityItem = pq.Dequeue() as PriorityItem;
                    Assert.AreSame(priorityItems[i], priorityItem);
                }
            }
        }
All Usage Examples Of Amib.Threading.Internal.PriorityQueue::Enqueue