prestige

ShahnovskiyLab4(1)

Dec 24th, 2012
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <set>
  6. #include <queue>
  7. #include <list>
  8. using namespace std;
  9. int gl_time = 0;
  10. vector<pair<int, int> > procs; // memory, time
  11. struct proc {
  12.     int begin, size, end_time;
  13.     proc(int begin = 0, int size = 0, int end_time = 0) {
  14.         this->begin = begin;
  15.         this->size = size;
  16.         this->end_time = end_time;
  17.     }
  18. };
  19. vector<proc> ram;
  20. void generate(int n = 65535) {
  21.     for (int i = 0; i < n; i++) {
  22.         procs.push_back(make_pair(rand() % n, rand() % n));
  23.     }
  24. }
  25. //redefine!!!!!!!!!!!!!!!!!!!!!
  26. struct classcomp1 {
  27.   bool operator() (const proc& lhs, const proc& rhs) const {
  28.       return lhs.begin < rhs.begin;
  29.   }
  30. };
  31. struct classcomp2 {
  32.   bool operator() (const proc& lhs, const proc& rhs) const {
  33.       return lhs.end_time < rhs.end_time;
  34.   }
  35. };
  36. struct classcomp3 {
  37.   bool operator() (const proc& lhs, const proc& rhs) const {
  38.       return lhs.end_time < rhs.end_time;
  39.   }
  40. };
  41. set<pair<proc, void*>,classcomp1 > fr_bsegment;
  42. set<pair<proc, void*>,classcomp2 > fr_tsegment;
  43. bool comp1(proc & a, proc & b) {
  44.         return a.end_time < b.end_time;
  45. }
  46. bool comp2(proc & a, proc & b) {
  47.     if (a.size == b.size)
  48.         return a.begin < b.begin;
  49.     return a.size < b.size;
  50. }
  51. void insert(pair<int, int > & a) {
  52.     //new elment
  53.     set<pair<proc, set<proc>::iterator>,classcomp1 >::iterator it = fr_bsegment.lower_bound(make_pair(new proc(a.first, a.second, 0), fr_tsegment.end()), comp2);
  54.     //for (set<pair<proc, void*>,classcomp1 >::iterator it = fr_bsegment.begin(); it != fr_bsegment.end(); ++it) {
  55.         if ((it->first).size >= a.first) {
  56.             proc toInsert((it->first).begin + a.first, a.first,gl_time + a.second);
  57.             ram.push_back(toInsert);
  58.             fr_bsegment.erase(it);
  59.             fr_tsegment.erase(*((set<pair<proc, void *>,classcomp2>::iterator *)(it->second)));
  60.             fr_bsegment.insert(*(new proc((it->first).begin + a.first, (it->first).size - a.second, 0)));
  61.             return ;
  62.         }
  63.     //}
  64.     set<pair<proc, set<proc>::iterator>,classcomp2 >::iterator it1 = fr_tsegment.lower_bound(make_pair(new proc(0, a.first, 0), fr_bsegment.end()), comp1);
  65.     gl_time = it1->first.end_time;
  66.     fr_bsegment.erase(*((set<pair<proc, void *>,classcomp1>::iterator *)(it1->second)));
  67.     insert(a);
  68.     return ;
  69. }
  70. int algo;
  71. int main() {
  72.     cout << "Enter number of you favourite algo:";
  73.     cout << "1 - firstfit";
  74.     cout << "2 - bestfit";
  75.     cin >> algo;
  76.     generate(100);
  77.     for (int i = 0; i < 100; i++) {
  78.         //are we need to delete
  79.         /*for (int j = 0; j < ram.size(); j++) {
  80.             if (ram[j].end_time <= gl_time) {
  81.                 ram.erase(ram.begin() + j);
  82.             }
  83.         }*/
  84.         //insert
  85.         insert(procs[i]);
  86.     }
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment