Advertisement
Guest User

Untitled

a guest
May 25th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. class TeamTasks {
  2. public:
  3.   const TasksInfo& GetPersonTasksInfo(const string& person) const {
  4.       return tasks.at(person);
  5.   }
  6.  
  7.   void AddNewTask(const string& person) {
  8.       ++tasks[person][TaskStatus::NEW];
  9.   }
  10.  
  11.   tuple<TasksInfo, TasksInfo> PerformPersonTasks(
  12.       const string& person, int task_count) {
  13.  
  14.       TasksInfo updated_tasks, untouched_tasks;
  15.  
  16.           for (int i = 0; i < tasks[person][TaskStatus::NEW]; ++i) {
  17.               ++updated_tasks[TaskStatus::IN_PROGRESS];
  18.               --task_count;
  19.  
  20.               if (task_count <= 0) {
  21.                   break;
  22.               }
  23.           }
  24.  
  25.           if (task_count > 0) {
  26.               for (int i = 0; i < tasks[person][TaskStatus::IN_PROGRESS]; ++i) {
  27.                           ++updated_tasks[TaskStatus::TESTING];
  28.                           --task_count;
  29.  
  30.                           if (task_count <= 0) {
  31.                               break;
  32.                           }
  33.               }
  34.           }
  35.  
  36.           if (task_count > 0) {
  37.               for (int i = 0; i < tasks[person][TaskStatus::TESTING]; ++i) {
  38.                           ++updated_tasks[TaskStatus::DONE];
  39.                           --task_count;
  40.  
  41.                           if (task_count <= 0) {
  42.                               break;
  43.                           }
  44.               }
  45.           }
  46.  
  47.           untouched_tasks[TaskStatus::NEW] = tasks[person][TaskStatus::NEW] - updated_tasks[TaskStatus::IN_PROGRESS];
  48.           untouched_tasks[TaskStatus::IN_PROGRESS] = tasks[person][TaskStatus::IN_PROGRESS] - updated_tasks[TaskStatus::TESTING];
  49.           untouched_tasks[TaskStatus::TESTING] = tasks[person][TaskStatus::TESTING] - updated_tasks[TaskStatus::DONE];
  50.  
  51.           tasks[person][TaskStatus::NEW]-= updated_tasks[TaskStatus::IN_PROGRESS];
  52.           tasks[person][TaskStatus::IN_PROGRESS] = tasks[person][TaskStatus::IN_PROGRESS] + updated_tasks[TaskStatus::IN_PROGRESS] - updated_tasks[TaskStatus::TESTING];
  53.           tasks[person][TaskStatus::TESTING] = tasks[person][TaskStatus::TESTING] + updated_tasks[TaskStatus::TESTING] - updated_tasks[TaskStatus::DONE];
  54.           tasks[person][TaskStatus::DONE] += updated_tasks[TaskStatus::DONE];
  55.  
  56.           for (auto& t : updated_tasks) {
  57.               if (t.second == 0) {
  58.                   updated_tasks.erase(t.first);
  59.               }
  60.           }
  61.  
  62.           for (auto& t : untouched_tasks) {
  63.               if (t.second == 0) {
  64.                   untouched_tasks.erase(t.first);
  65.               }
  66.           }
  67.           return tie(updated_tasks, untouched_tasks);
  68.   }
  69.  
  70. private:
  71.   map<string, TasksInfo> tasks;
  72. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement