From a82a54f081ce561e6bc6e9f82869f8b40a47e660 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Wed, 25 May 2022 19:59:16 +0300 Subject: Added my work from today's exam --- .../Exam 2/ex2/EventManager.cpp | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.cpp (limited to 'Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.cpp') diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.cpp b/Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.cpp new file mode 100644 index 0000000..cf96756 --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.cpp @@ -0,0 +1,54 @@ +#include "EventManager.h" + +void EventManager::copyFrom(const EventManager& other) { + events = new Event*[other.maxCount]; + for (unsigned i = 0; i < other.count; i++) + events[i] = other.events[i]->clone(); + count = other.count; + maxCount = other.maxCount; +} + +void EventManager::free() { + for (unsigned i = 0; i < count; i++) + delete events[i]; + delete[] events; +} + +EventManager::EventManager(unsigned maxCount) { + events = new Event*[maxCount]; + this->maxCount = maxCount; + count = 0; +} + +bool EventManager::addEvent(const Event* event) { + if (maxCount == count) + return false; + + events[count++] = event->clone(); + return true; +} + +unsigned EventManager::ongoingEvents(unsigned time) { + unsigned ongoing = 0; + for (unsigned i = 0; i < count; i++) + ongoing += events[i]->isHappeningAt(time); + return ongoing; +} + +EventManager::EventManager() : EventManager(1) {} + +EventManager::EventManager(const EventManager& other) { + copyFrom(other); +} + +EventManager& EventManager::operator=(const EventManager& other) { + if (this != &other) { + free(); + copyFrom(other); + } + return *this; +} + +EventManager::~EventManager() { + free(); +} -- cgit v1.3.1-23-gd82d