private HeapEntry PopHeap()

in csharp/src/Containers/HeapWithIndices.cs [320:361]


		private HeapEntry PopHeap()
		{
			HeapEntry returnValue = elements[0];
			int last = head;
			head = elements[0].Key;
			keysPosition[head] = -last - 1;
			elements[0] = elements[count - 1];
			HeapEntry value = elements[count - 1];
			count--;
			if (count == 0) return returnValue;
			int current = 0;
			while (current < count)
			{
				int left = (current << 1) + 1;
				int right = (current << 1) + 2;
				int swapIndex = current;
				if (left > count)
				{
					swapIndex = current;
				}
				else
				if (right > count)
				{
					if (comparer.Compare(elements[left].Value, value.Value) < 0) swapIndex = left;
				}
				else
				{
					if (comparer.Compare(elements[left].Value, elements[right].Value) < 0)
					{
						if (comparer.Compare(elements[left].Value, value.Value) < 0) swapIndex = left;
					}
					else if (comparer.Compare(elements[right].Value, value.Value) < 0) swapIndex = right;
				}
				if (swapIndex == current) break;
				elements[current] = elements[swapIndex];
				keysPosition[elements[current].Key] = current;
				current = swapIndex;
			}
			elements[current] = value;
			keysPosition[elements[current].Key] = current;
			return returnValue;
		}