diff options
Added my work from today's exam
1 files changed, 54 insertions, 0 deletions
| -rw-r--r-- | Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.cpp | 54 |
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(); +} |
