#include "hlavicka.h"

using namespace std;


/*TODO FUNKCIA PRE VYBUSENIE KODU ZO SMERNIKU NA VRCHOL*/
vector<bool> koduj(vrchol* vrch){
//cerr << "kodujem " << endl;
  vrchol* v=vrch;
  vector<bool> kod;
//cerr << "zacinam "<< v << " " << endl;
  while(v->motec()!=v){
    vrchol* pom=v->motec();
  //  cerr << "vychadzam z " << v << " na " << pom << endl;
    kod.push_back(pom->p_syn()==v);
    v=pom;
  }
//cerr << "hotovo idem zmazat vrchol" << endl;
  v->zmaz();
  delete v;
  return kod;
}



/*FUNKCIE PRE STAVBU STROMCEKOV*/
  vrchol* urob_stromcek_zhora(priority_queue<ukaz,vector<ukaz>, greater<ukaz> > vrcholy){
  //vytvorenie stromceka z vrcholov, vrati koren
    vrchol* v=vrcholy.top().moj;
    vrcholy.pop();
    while(!vrcholy.empty()){
      vrchol* v2=vrcholy.top().moj;
      vrcholy.pop();
      vrchol* g= new vrchol(v,v2);
      vrcholy.push(ukaz(g));
      v=vrcholy.top().moj;
      vrcholy.pop();
    }
    return v;
  }
  
  vrchol* urob_stromcek_zdola(priority_queue<ukaz,vector<ukaz>, greater<ukaz> > moja,long sekvencia){
    priority_queue<ukaz,vector<ukaz>, greater<ukaz> > vrcholy=moja;
    vrchol* vrat;   
    vrchol* v=vrcholy.top().moj;
    if(v->sekvencia()==sekvencia){ 
      vrat=v;
    }
    vrcholy.pop();
    while(!vrcholy.empty()){
      vrchol* v2=vrcholy.top().moj;
      if(v2->sekvencia()==sekvencia){ 
	vrat=v2;
      }
      vrcholy.pop();
      vrchol* b=new vrchol(v,v2);
      vrcholy.push(ukaz(b));     
      v=vrcholy.top().moj;
       if(v->sekvencia()==sekvencia){ 
	vrat=v;
      }
      vrcholy.pop();
    }    
    return vrat;
  }
  
  vrchol* urob_stromcek_koniec(priority_queue<ukaz,vector<ukaz>, greater<ukaz> > vrcholy){
  //vytvorenie stromceka z vrcholov
    vrchol* vrat;
    vrchol* v=vrcholy.top().moj;
    if(v->koncim()) vrat=v;
    vrcholy.pop();
    while(!vrcholy.empty()){
      //cerr << v << " v ";
      vrchol* v2=vrcholy.top().moj;
      if(v2->koncim()) vrat=v2; 
      vrcholy.pop();
      vrchol* g= new vrchol(v,v2);
      vrcholy.push(ukaz(g));
      v=vrcholy.top().moj;
      if(v->koncim()) vrat=v; 
      vrcholy.pop();
    }
   // cerr << endl;
    return vrat;
  }


