/// <summary> /// constructor with a specific direction and comparision function /// </summary> /// <param name="Direction">direction</param> /// <param name="priorityComparison">comparision</param> public FibonacciHeap(HeapDirection Direction, Func <TPriority, TPriority, int> priorityComparison) { nodes = new FibonacciHeapHeapLinkedList <TPriority, TValue>(); degreeToNode = new Dictionary <int, FibonacciHeapHeapCell <TPriority, TValue> >(); DirectionMultiplier = (short)(Direction == HeapDirection.Increasing ? 1 : -1); this.direction = Direction; this.priorityComparsion = priorityComparison; count = 0; }
/// <summary> /// merging two lists /// </summary> /// <param name="list">second list</param> internal void MergeLists(FibonacciHeapHeapLinkedList <TPriority, TValue> list) { Contract.Requires(list != null); if (list.First != null) { if (last != null) { last.Next = list.first; } list.first.Previous = last; last = list.last; if (first == null) { first = list.first; } } }