| 123456789101112131415161718192021222324252627282930313233343536373839 |
- using System.Collections.Concurrent;
- namespace ARMeilleure.Translation
- {
- class PriorityQueue<T>
- {
- private ConcurrentStack<T>[] _queues;
- public PriorityQueue(int priorities)
- {
- _queues = new ConcurrentStack<T>[priorities];
- for (int index = 0; index < priorities; index++)
- {
- _queues[index] = new ConcurrentStack<T>();
- }
- }
- public void Enqueue(int priority, T value)
- {
- _queues[priority].Push(value);
- }
- public bool TryDequeue(out T value)
- {
- for (int index = 0; index < _queues.Length; index++)
- {
- if (_queues[index].TryPop(out value))
- {
- return true;
- }
- }
- value = default(T);
- return false;
- }
- }
- }
|