/// <summary> /// Initializes a new instance of the /// <see cref="AlternativePriorityQueue{TPriority, TData}"/> class. /// </summary> /// <param name="copyFrom"> /// The <see cref="AlternativePriorityQueue{TPriority, TData}"/> to /// copy from. /// </param> /// <exception cref="ArgumentNullException"> /// <paramref name="copyFrom"/> is <see langword="null"/>. /// </exception> public AlternativePriorityQueue(AlternativePriorityQueue <TPriority, TData> copyFrom) { if (copyFrom == null) { throw new ArgumentNullException("copyFrom"); } this.nodes = new List <PriorityQueueNode <TPriority, TData> >(copyFrom.nodes.Count); this.priorityComparer = copyFrom.priorityComparer; // We need to copy the nodes, because they store queue state that // will change in one queue but not in the other. for (int i = 0; i < copyFrom.nodes.Count; i++) { var nodeToCopy = copyFrom.nodes[i]; var copiedNode = nodeToCopy == null ? null : new PriorityQueueNode <TPriority, TData>(nodeToCopy); this.nodes.Add(copiedNode); } }
/// <summary> /// Creates an instance of this class /// </summary> /// <param name="capacity">The capacity of the queue</param> /// <param name="comparer">The comparer to use for computing priority values</param> public PriorityQueue(int capacity, IComparer <T> comparer) { _queue = new AlternativePriorityQueue <T, T>(capacity, comparer); }
/// <summary> /// Creates an instance of this class /// </summary> public PriorityQueue() { _queue = new AlternativePriorityQueue <T, T>(); }