#include "QueueHandler.h"

namespace cosi {

namespace algorithms {

namespace onchipcommunication {

Queue::Queue( ){

}

Queue::~Queue( )
{
  Q.clear( ) ;
}

int Queue::Empty( )
{
  return ( Q.size( ) == 0 ) ;
}

int Queue::ExtractMin( vector< double > C )
{

  int RetVal ;
  double MinCost ;
  set< int >::iterator it ;
  set< int >::iterator MinElement ;
  it = Q.begin( ) ;
  MinCost = C[*it] ;
  MinElement = it ;
  it++ ;
  for(  ; it != Q.end( ) ; it++ ) {

    if ( MinCost > C[*it]  ) {
      MinCost = C[*it];
      MinElement = it ;
    }

  }

  RetVal = *MinElement ;
  Q.erase( MinElement ) ;
  return RetVal ;
}

int Queue::ExtractMin( map< int , double > C )
{

  int RetVal ;
  double MinCost ;
  set< int >::iterator it ;
  set< int >::iterator MinElement ;
  it = Q.begin( ) ;
  MinCost = C[*it] ;
  MinElement = it ;
  it++ ;
  for(  ; it != Q.end( ) ; it++ ) {

    if ( MinCost > C[*it]  ) {
      MinCost = C[*it];
      MinElement = it ;
    }

  }

  RetVal = *MinElement ;
  Q.erase( MinElement ) ;
  return RetVal ;
}



void
Queue::Insert( int V )
{
  Q.insert( V ) ;
}
}
}
}