diff options
| author | Léo Lam <leo@leolam.fr> | 2021-02-01 01:51:19 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-01 01:51:19 +0100 |
| commit | 76b9041c7846567c72b727c73f51b9f4f681ec2b (patch) | |
| tree | b84febbc61f81301224882da85e92c9a759b0ae5 /src/KingSystem/Utils/Thread/MessageDispatcher.cpp | |
| parent | eaa0f651efa89bd6bff75fcbb482fc57a5b7d77a (diff) | |
| parent | fb09e658e2ab42fb0177f89c831cb2b78692bf07 (diff) | |
Merge pull request #25 from leoetlino/message-dispatcher
ksys: Add several MessageDispatcher functions
Diffstat (limited to 'src/KingSystem/Utils/Thread/MessageDispatcher.cpp')
| -rw-r--r-- | src/KingSystem/Utils/Thread/MessageDispatcher.cpp | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/src/KingSystem/Utils/Thread/MessageDispatcher.cpp b/src/KingSystem/Utils/Thread/MessageDispatcher.cpp index a43a1596..cbd4f905 100644 --- a/src/KingSystem/Utils/Thread/MessageDispatcher.cpp +++ b/src/KingSystem/Utils/Thread/MessageDispatcher.cpp @@ -1,10 +1,13 @@ #include "KingSystem/Utils/Thread/MessageDispatcher.h" +#include <heap/seadHeapMgr.h> +#include <prim/seadMemUtil.h> +#include <thread/seadThread.h> +#include "KingSystem/Utils/HeapUtil.h" +#include "KingSystem/Utils/SafeDelete.h" #include "KingSystem/Utils/Thread/Message.h" namespace ksys { -SEAD_SINGLETON_DISPOSER_IMPL(MessageDispatcher) - MessageDispatcher::Queue::Queue() = default; MessageDispatcher::Queue::~Queue() { @@ -69,6 +72,10 @@ void MessageDispatcher::DoubleBufferedQueue::processQueue(MessageProcessor& proc MessageDispatcher::Queues::DummyLogger::~DummyLogger() = default; +MessageDispatcher::Logger::~Logger() = default; + +void MessageDispatcher::Logger::log(const Message& message, bool success) {} + MessageDispatcher::MainQueue::MainQueue() = default; MessageDispatcher::MainQueue::~MainQueue() = default; @@ -111,4 +118,39 @@ MessageDispatcher::Queues::~Queues() { mMainQueue.clear(); } +SEAD_SINGLETON_DISPOSER_IMPL(MessageDispatcher) + +MessageDispatcher::~MessageDispatcher() { + mBools.freeBuffer(); + mBoolBuffer.freeBuffer(); + util::safeDelete(mQueues); +} + +void MessageDispatcher::init(const InitArg& arg, sead::Heap* heap) { + heap = util::getHeapOrCurrentHeap(heap); + sead::ScopedCurrentHeapSetter heap_setter{heap}; + + if (arg.set_instance) + setAsGlobalInstance(); + + mQueues = new (heap) Queues(&mLogger); + + mUpdateEndEvent.initialize(true); + mUpdateEndEvent.setSignal(); + + mBoolBuffer.allocBufferAssert(arg.num_bools, heap); + sead::MemUtil::fillZero(mBoolBuffer.getBufferPtr(), mBoolBuffer.getByteSize()); + + mBools.allocBuffer(arg.num_bools, heap); + for (int i = 0, n = mBoolBuffer.size(); i < n; ++i) { + mBools.emplaceBack(&mBoolBuffer[i]); + } + + mFlags.set(Flag::Initialized); +} + +bool MessageDispatcher::isProcessingOnCurrentThread() const { + return mProcessingThread == sead::ThreadMgr::instance()->getCurrentThread(); +} + } // namespace ksys |
