package structures;

public class PairingHeap<T extends Comparable<T>> {
	protected PNode<T> m_queue = null;
	
	public IReference<T> insert(T key)
	{
		PNode<T> newNode = new PNode<>(key);
		m_queue = newNode.merge(m_queue);
		
		return new HeapPair<>(this, newNode);
	}

	
	public T extractMin()
	{
		T val = PNode.lookupMin(m_queue);
		m_queue = PNode.extractMin(m_queue);
		
		return val;
	}
	
	
	public T lookupMin()
	{
		return PNode.lookupMin(m_queue);
	}
	
	
	public boolean isEmpty()
	{
		return m_queue == null;
	}

}
