#include using namespace std; #include "complex_task.h" ComplexTask::ComplexTask(char const* _name) : Task(_name), totalTime(0), progress(0) { } void ComplexTask::print() const { cout << "сложна"; Task::print(); cout << ", която се състои от: {"; StackElement* p = top; while (p != NULL) { p->data->print(); cout << ", "; p = p->next; } cout << "}"; } int ComplexTask::work(int t) { while (t > 0 && !empty()) { Task* current = peek(); int newTime = current->work(t); progress += t - newTime; t = newTime; if (current->isFinished()) pop(); } return t; } void ComplexTask::push(Task const* task) { LinkedStack::push((Task*)task->clone()); totalTime += task->getTime(); } void ComplexTask::copy(ComplexTask const& ct) { totalTime = ct.totalTime; progress = ct.progress; StackElement* p = top; while (p != NULL) { p->data = (Task*)p->data->clone(); p = p->next; } } void ComplexTask::erase() { StackElement* p = top; while (p != NULL) { delete p->data; p = p->next; } } ComplexTask::ComplexTask(ComplexTask const& ct) : Task(ct), LinkedStack(ct) { copy(ct); } ComplexTask& ComplexTask::operator=(ComplexTask const& ct) { if (this != &ct) { Task::operator=(ct); LinkedStack::operator=(ct); erase(); copy(ct); } return *this; } ComplexTask::~ComplexTask() { erase(); }