/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: IOProcessorItems.cpp Date: 2022-6-6 Author: Reece ***/ #include #include #include "AuIOProcessorItem.hpp" #include "AuIOProcessorItems.hpp" #include "AuIOProcessor.hpp" namespace Aurora::IO { bool IOProcessorItems::Init() { this->mutex = AuThreadPrimitives::CriticalSectionUnique(); this->mutex2 = AuThreadPrimitives::CriticalSectionUnique(); this->cvEvent = AuLoop::NewLSEvent(false, true, true); return bool(this->mutex) && bool(this->mutex2); } bool IOProcessorItems::AddFrameTemp(const AuSPtr &item) { AU_TRY_LOCK_GUARD_RET_DEF(this->mutex); return AuTryInsert(this->workSignaled, item); } bool IOProcessorItems::AddFrameOrFallback(const AuSPtr &item) { if (!AddFrameTemp(item)) { AU_LOCK_GUARD(this->mutex2); this->cvEvent->Set(); return AuTryInsert(this->workSignaled2, item); } return true; } bool IOProcessorItems::ScheduleFinish(const AuSPtr &item, bool unsafe) { AU_TRY_LOCK_GUARD_RET_DEF(this->mutex); return AuTryInsert(this->crossThreadAbort, AuMakePair(item, unsafe)); } AuList> IOProcessorItems::GetBlockedSignals() { AU_LOCK_GUARD(this->mutex2); return AuExchange(this->workSignaled2, {}); } }