Untitled
unknown
plain_text
4 years ago
3.4 kB
2
Indexable
#include "InterferenceGraph.h" #include "Test.h" #include "ResourceAllocationLib.h" #include "Instruction.h" #include "Constants.h" #include <iostream> #include <vector> using namespace std; static InterferenceGraph ig; InterferenceGraph& buildInterferenceGraph(Instructions& instructions) { // Here goes your code. ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// //1. dobavi listu promenljivih. ig.variables = &getVariables(); //2. podesi velicinu matrice smetnji InterferenceMatrix interference_matrix; //resize broja kolona interference_matrix.resize(ig.variables->size()); //resize sve kolone (da dobijes odg. broj vrsta) for(int i = 0; i < interference_matrix.size(); ++i) { interference_matrix.at(i).resize(interference_matrix.size()); } //dodela matrice polju ig.matrix ig.matrix = interference_matrix; //3. treba proci kroz instrukcije Instructions::iterator iter = instructions.begin(); for (iter; iter != instructions.end(); ++iter) { //treba da ne bude move if ((*iter)->type != InstructionType::move) { //iteriramo po def Variables::iterator var_iter = (*iter)->def.begin(); for(var_iter; var_iter != (*iter)->def.end(); ++var_iter) { //sad iteriramo kroz out Variables::iterator var_iter_ = (*iter)->out.begin(); for(var_iter_; var_iter_ != (*iter)->out.end(); ++var_iter_) { //sad treba da proverimo da li ima smetnje izmedju varijabli if((*var_iter)->pos != (*var_iter_)->pos) { //dodajemo smetnju u matricu smetnji ig.matrix.at((*var_iter)->pos).at((*var_iter_)->pos) = __INTERFERENCE__; ig.matrix.at((*var_iter_)->pos).at((*var_iter)->pos) = __INTERFERENCE__; } //ne treba else tj ne treba dodavati i cvorove koji nisu u smetnji } } } } ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// return ig; } void printInterferenceMatrix() { if (ig.matrix.size() == 0) { cout << "There is nothing to print!" << endl; return; } cout << "==========================================" << endl; cout << "Interference matrix:" << endl; cout << "==========================================" << endl; // print existing variables in order to mark rows and columns for (auto varIt = ig.variables->begin(); varIt != ig.variables->end(); varIt++) { cout << "\t" << (*varIt)->name; } cout << endl; auto varIt = ig.variables->begin(); for (auto it1 = ig.matrix.begin(); it1 != ig.matrix.end(); it1++) { cout << (*varIt++)->name; for (auto it2 = (*it1).begin(); it2 != (*it1).end(); it2++) { cout << "\t" << *it2; } cout << endl; } cout << "==========================================" << endl; }
Editor is loading...