Advertisement
canezzy

HeheheheheSPP

May 8th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.97 KB | None | 0 0
  1. #include "InterferenceGraph.h"
  2. #include "Test.h"
  3. #include "ResourceAllocationLib.h"
  4. #include "Instruction.h"
  5. #include "Constants.h"
  6.  
  7. #include <iostream>
  8. #include <vector>
  9.  
  10. using namespace std;
  11.  
  12. static InterferenceGraph ig;
  13.  
  14.  
  15.  
  16. InterferenceGraph& buildInterferenceGraph(Instructions& instructions)
  17. {
  18.     // Here goes your code.
  19.  
  20. //////////////////////////////////////////////////////////////
  21. //////////////////////////////////////////////////////////////
  22. //////////////////////////////////////////////////////////////
  23.  
  24.     //1. dobavi listu promenljivih.
  25.     ig.variables = &getVariables();
  26.  
  27.     //2. podesi velicinu matrice smetnji
  28.     InterferenceMatrix interference_matrix;
  29.     //resize broja kolona
  30.     interference_matrix.resize(ig.variables->size());
  31.     //resize sve kolone (da dobijes odg. broj vrsta)
  32.     for(int i = 0; i < interference_matrix.size(); ++i)
  33.     {
  34.         interference_matrix.at(i).resize(interference_matrix.size());
  35.     }
  36.     //dodela matrice polju ig.matrix
  37.     ig.matrix = interference_matrix;
  38.  
  39.     //3. treba proci kroz instrukcije
  40.     Instructions::iterator iter = instructions.begin();
  41.     for (iter; iter != instructions.end(); ++iter)
  42.     {
  43.         //treba da ne bude move
  44.         if ((*iter)->type != InstructionType::move)
  45.         {
  46.             //iteriramo po def
  47.             Variables::iterator var_iter = (*iter)->def.begin();
  48.             for(var_iter; var_iter != (*iter)->def.end(); ++var_iter)
  49.             {
  50.                 //sad iteriramo kroz out
  51.                 Variables::iterator var_iter_ = (*iter)->out.begin();
  52.                 for(var_iter_; var_iter_ != (*iter)->out.end(); ++var_iter_)
  53.                 {
  54.                     //sad treba da proverimo da li ima smetnje izmedju varijabli
  55.                     if((*var_iter)->pos != (*var_iter_)->pos)
  56.                     {
  57.                         //dodajemo smetnju u matricu smetnji
  58.                         ig.matrix.at((*var_iter)->pos).at((*var_iter_)->pos) = __INTERFERENCE__;
  59.                         ig.matrix.at((*var_iter_)->pos).at((*var_iter)->pos) = __INTERFERENCE__;
  60.                     }
  61.                     //ne treba else tj ne treba dodavati i cvorove koji nisu u smetnji
  62.                 }
  63.  
  64.             }
  65.  
  66.  
  67.         }
  68.     }
  69.  
  70.  
  71. //////////////////////////////////////////////////////////////
  72. //////////////////////////////////////////////////////////////
  73. //////////////////////////////////////////////////////////////
  74.  
  75.     return ig;
  76. }
  77.  
  78.  
  79. void printInterferenceMatrix()
  80. {
  81.     if (ig.matrix.size() == 0)
  82.     {
  83.         cout << "There is nothing to print!" << endl;
  84.         return;
  85.     }
  86.  
  87.     cout << "==========================================" << endl;
  88.     cout << "Interference matrix:" << endl;
  89.     cout << "==========================================" << endl;
  90.  
  91.     // print existing variables in order to mark rows and columns
  92.     for (auto varIt = ig.variables->begin(); varIt != ig.variables->end(); varIt++)
  93.     {
  94.         cout << "\t" << (*varIt)->name;
  95.     }
  96.     cout << endl;
  97.  
  98.     auto varIt = ig.variables->begin();
  99.     for (auto it1 = ig.matrix.begin(); it1 != ig.matrix.end(); it1++)
  100.     {
  101.         cout << (*varIt++)->name;
  102.         for (auto it2 = (*it1).begin(); it2 != (*it1).end(); it2++)
  103.         {
  104.             cout << "\t" << *it2;
  105.         }
  106.         cout << endl;
  107.     }
  108.     cout << "==========================================" << endl;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement