Advertisement
Guest User

Untitled

a guest
Apr 26th, 2015
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #include "../header/SchrageAlgorithm.hpp"
  2.  
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <queue>
  6.  
  7. int SchrageAlgorithm::performAlgorithm(Tasks&& tasksVector)
  8. {
  9.     // Tworzenie kolejek priorytetowych
  10.     auto l1 = [] (const Task& lhs, const Task& rhs)
  11.         {
  12.             if (lhs.getAvailabilityTerm() > rhs.getAvailabilityTerm()) return true;
  13.             if (rhs.getAvailabilityTerm() > lhs.getAvailabilityTerm()) return false;
  14.             //if (lhs.getDeliveryTime() < rhs.getDeliveryTime()) return true;
  15.             //if (lhs.getDeliveryTime() < rhs.getDeliveryTime()) return false;
  16.             return false;
  17.         };
  18.  
  19.     auto l2 = [] (const Task& lhs, const Task& rhs)
  20.         {
  21.             if (lhs.getDeliveryTime() < rhs.getDeliveryTime()) return true;
  22.             if (lhs.getDeliveryTime() < rhs.getDeliveryTime()) return false;
  23.             return false;
  24.         };
  25.  
  26.     std::priority_queue<Task, std::vector<Task>, decltype(l1)> tasks(l1);
  27.     std::priority_queue<Task, std::vector<Task>, decltype(l2)> readyTasks(l2);
  28.  
  29.     // przepisanie z vectora do kolejki
  30.     for (auto task : tasksVector)
  31.     {
  32.         tasks.push(task);
  33.     }
  34.  
  35. // tu sie zaczyna algorytm z psedokodu
  36.     while (!tasks.empty() || !readyTasks.empty())
  37.     {
  38.         while(!tasks.empty() && tasks.top().getAvailabilityTerm() <= currentTerm)
  39.         {
  40.             readyTasks.push(tasks.top());
  41.             tasks.pop();
  42.         }
  43.  
  44.         if (readyTasks.empty())
  45.         {
  46.             currentTerm = tasks.top().getAvailabilityTerm();
  47.         }
  48.         else
  49.         {
  50.             Task t = readyTasks.top();
  51.             readyTasks.pop();
  52.  
  53.             currentTerm = currentTerm + t.getOperationTime();
  54.             int max = currentTerm + t.getDeliveryTime();
  55.  
  56.             if (max > deliveryTime)
  57.             {
  58.                 deliveryTime = max;
  59.             }
  60.         }
  61.     }
  62.     return deliveryTime;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement