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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#include "stdafx.h"
#include "RunOn.h"
#include "Core/Str.h"
namespace storm {
RunOn::RunOn() : state(any), thread(null) {}
RunOn::RunOn(State s) : state(s), thread(null) {}
RunOn::RunOn(NamedThread *thread) : state(named), thread(thread) {}
Bool RunOn::canRun(RunOn o) const {
// Anyone can run something declared 'any'.
if (o.state == any)
return true;
// If the other is declared as 'runtime', we can not know.
if (o.state == runtime)
return false;
if (state != o.state)
return false;
if (state == named && thread != o.thread)
return false;
return true;
}
wostream &operator <<(wostream &to, const RunOn &v) {
switch (v.state) {
case RunOn::any:
to << L"any";
break;
case RunOn::runtime:
to << L"runtime";
break;
case RunOn::named:
to << L"named: " << v.thread->identifier()->c_str();
break;
}
return to;
}
void RunOn::toS(StrBuf *to) const {
switch (state) {
case RunOn::any:
*to << S("any");
break;
case RunOn::runtime:
*to << S("runtime");
break;
case RunOn::named:
*to << S("named: ") << thread->identifier();
break;
}
}
}
|