/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: GroupState.hpp Date: 2021-11-1 Author: Reece ***/ #pragma once #include "ThreadState.hpp" namespace Aurora::Async { struct GroupWorkQueue { AuThreadPrimitives::Mutex mutex; AuUInt32 uItems {}; AuList sortedWork[AuAsync::kEWorkPrioCount]; bool IsEmpty(); bool IsEmpty(AuWorkerId_t id); void AddWorkEntry(WorkEntry_t entry); void Dequeue(AuList &queue, int maxPopCount, AuAsync::ThreadId_t idd); }; struct GroupState { ThreadGroup_t group; GroupWorkQueue workQueue; AuThreadPrimitives::Mutex workersMutex; AuBST> workers; AuWPtr wpWorkers[32]; bool Init(); void BroadCast(); void AddWorker(ThreadId_t id, AuSPtr pState); AuSPtr GetThreadByIndex(ThreadId_t uIndex); bool inline IsSysThread() { return group == 0; } }; }