summaryrefslogtreecommitdiffstats
path: root/src/engine/engineworker.cpp
blob: 43e99141a01c6495c81295772087b3e848c6d32b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// engineworker.cpp
// Created 6/2/2010 by RJ Ryan (rryan@mit.edu)

#include "engine/engineworker.h"
#include "engine/engineworkerscheduler.h"

EngineWorker::EngineWorker()
    : m_pScheduler(nullptr) {
    m_notReady.test_and_set();
}

EngineWorker::~EngineWorker() {
}

void EngineWorker::run() {
}

void EngineWorker::setScheduler(EngineWorkerScheduler* pScheduler) {
    DEBUG_ASSERT(m_pScheduler == nullptr);
    m_pScheduler = pScheduler;
    pScheduler->addWorker(this);
}

void EngineWorker::workReady() {
    m_notReady.clear();
    VERIFY_OR_DEBUG_ASSERT(m_pScheduler) {
        return;     
    }
    m_pScheduler->workerReady();
}

void EngineWorker::wakeIfReady() {
    if (!m_notReady.test_and_set()) {
        m_semaRun.release();
    }
}