#ifndef priority_queue_h_
#define priority_queue_h_

#include <iostream>
#include <vector>
using namespace std;


template <class T>
class priority_queue {
private:
  vector<T> m_heap;

public:
  priority_queue() {}

  priority_queue( vector<T> const& values )
  {
  }

  const T& top() const 
  {
    assert( !m_heap.empty() );
    return m_heap[0]; 
  }

  void push( const T& entry )
  {
  }

  void pop() 
  {
    assert( !m_heap.empty() );
  }

  int size() { return m_heap.size(); }
  bool empty() { return m_heap.empty(); }


  //  The following three functions are used for debugging.

  //  Check to see that internally the heap property is realized.
  bool check_heap( )
  {
    return this->check_heap( this->m_heap );
  }

  //  Check an extrernal vector to see that the heap property is realized.
  bool check_heap( const vector<T>& heap )
  {
  }

  //  A utility to print the contents of the heap.  Use it for debugging.
  void print_heap( ostream & ostr )
  {
    for ( unsigned int i=0; i<m_heap.size(); ++i )
      ostr << i << ": " << m_heap[i] << endl;
  }
  
};


template <class T>
void heap_sort( vector<T> & v )
{
}

#endif

