Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement