prestige

ShahnovskiyLab4

Dec 24th, 2012
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 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. set<pair<proc, void*>,classcomp1 > fr_bsegment;
  37. set<pair<proc, void*>,classcomp2 > fr_tsegment;
  38. void insert(pair<int, int > & a) {
  39.     //new elment
  40.     for (set<pair<proc, void*>,classcomp1 >::iterator it = fr_bsegment.begin(); it != fr_bsegment.end(); ++it) {
  41.         if ((it->first).size >= a.first) {
  42.             proc toInsert((it->first).begin + a.first, a.first,gl_time + a.second);
  43.             ram.push_back(toInsert);
  44.             fr_bsegment.erase(it);
  45.             fr_tsegment.erase(*((set<pair<proc, void *>,classcomp2>::iterator *)(it->second)));
  46.             fr_bsegment.insert(*(new proc((it->first).begin + a.first, (it->first).size - a.second, 0)));
  47.             return ;
  48.         }
  49.     }
  50.     set<pair<proc, set<proc>::iterator>,classcomp2 >::iterator it = fr_tsegment.lower_bound(make_pair(new proc(0, a.first, 0), fr_tsegment.end()));
  51.     gl_time = it->first.end_time;
  52.     fr_bsegment.erase(*((set<pair<proc, void *>,classcomp1>::iterator *)(it->second)));
  53.     insert(a);
  54.     return ;
  55. }
  56. int main() {
  57.     generate(100);
  58.     for (int i = 0; i < 100; i++) {
  59.         //are we need to delete
  60.         for (int j = 0; j < ram.size(); j++) {
  61.             if (ram[j].end_time <= gl_time) {
  62.                 ram.erase(ram.begin() + j);
  63.             }
  64.         }
  65.         //insert
  66.         insert(procs[i]);
  67.        
  68.     }
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment