#include "todolist.hpp" #include "task.hpp" namespace todo { ToDoList::ToDoList() { completedCount = 0; incompleteCount = 0; } void ToDoList::add(const Task& t) { if (incompleteCount + completedCount < MAX_TASKS) { todo[incompleteCount] = t; incompleteCount++; } } bool ToDoList::isIncomplete() const { return (incompleteCount > 0); } Task ToDoList::getNext() const { if (incompleteCount > 0) { return todo[0]; } else { throw std::logic_error{"no incomplete tasks"}; } } void ToDoList::completeNext() { if (incompleteCount > 0) { // mark completed todo[0].complete(); // move to list of completed completed[completedCount] = todo[0]; completedCount++; // shift incomplete tasks back incompleteCount--; for (int i = 0; i < incompleteCount; i++) { todo[i] = todo[i + 1]; } } } void ToDoList::delayNext() { if (incompleteCount >= 2) { Task delayed = todo[0]; todo[0] = todo[1]; todo[1] = delayed; } } void ToDoList::postponeNext() { if (incompleteCount >= 2) { Task postponed = todo[0]; for (int i = 0; i < incompleteCount - 1; i++) { todo[i] = todo[i + 1]; } todo[incompleteCount - 1] = postponed; } } int ToDoList::timeRemaining() const { int tot = 0; for (int i = 0; i < incompleteCount; i++) { tot += todo[i].time(); } return tot; } int ToDoList::remainingTasks() const { return incompleteCount; } ToDoList ToDoList::makeDrinkTasks(const std::string& drink) { ToDoList drinkTasks{}; Task makeTask(std::string("make ") + drink, 5); Task drinkTask(std::string("drink ") + drink, 90); drinkTasks.add(makeTask); drinkTasks.add(drinkTask); return drinkTasks; } }