16#define TEMPLATE template <typename R, typename T>
17#define ME tworker<R, T>
21 TEMPLATE ME::tworker(
const errReport& rpt): _rpt(rpt), _logFlag(0) {}
23 TEMPLATE errReport& ME::getReport() {
return *_rpt; }
26 ME& ME::setReport(errReport& rpt) {
32 ME& ME::setFlag(nint newFlag) {
38 ME& ME::addFlag(nint newFlag) {
44 ME& ME::delFlag(nint clear) {
49 TEMPLATE nbool ME::isFlag(nint flag)
const {
return (_logFlag & flag) == flag; }
51 TEMPLATE nint ME::getFlag()
const {
return _logFlag; }
54 ME& ME::setTask(
const T& task) {
59 TEMPLATE T* ME::getTask() {
return _task.get(); }
61 TEMPLATE
void ME::rel() { _rel(); }
65 _rpt.bind(dummyErrReport::singleton);
71 void ME::_prepare() { _area.rel(); }
74 void ME::_report(baseErr* e) {
76 if(isFlag(LOG_ON_EX)) {
77 enablesZone zone(
true);
79 }
else if(isFlag(DUMP_ON_EX)) {
80 enablesZone zone(
true);
85 TEMPLATE area& ME::_getArea() {
return _area; }
87 TEMPLATE nbool ME::isOk()
const {
return !_rpt->inErr(); }
90 void ME::_onEndWork() {
92 _onEndErrReport(*_rpt);
96 R ME::work() {
return workerAdapter<R, T>::adaptWork(*
this); }
99 void ME::_onEndErrReport(
const errReport& rpt)
const {
100 WHEN(!isFlag(DUMP_ON_END | LOG_ON_END) || !rpt) .ret();
103 if(isFlag(DUMP_ON_END)) {
107 if(isFlag(LOG_ON_END)) rpt.log();
111#define ME workerAdapter<R, T>
114 R ME::adaptWork(tworker<R, T>& w) {
115 if(w.isFlag(tworker<R, T>::GUARD)) {
117 BY_I(
"▶ %s.work()", w);
123 enablesZone internal;
124 if(!w.isFlag(tworker<R, T>::INTERNAL)) internal.setEnable(
false);
126 internal.setPrev().rel();
128 if(w.isFlag(tworker<R, T>::GUARD)) BY_I(
"%s._onEndWork()", w);
132 if(w.isFlag(tworker<R, T>::GUARD)) {
134 BY_I(
"◀ %s ends!", w);
141#define TEMPLATE template <typename T>
142#define ME workerAdapter<void, T>
145 void ME::adaptWork(tworker<void, T>& w) {
146 if(w.isFlag(tworker<void, T>::GUARD)) {
147 BY_I(
"▶ %s.work()", w);
155 enablesZone internal;
156 if(!w.isFlag(tworker<void, T>::INTERNAL)) logger::get().setEnable(
false);
160 if(w.isFlag(tworker<void, T>::GUARD)) BY_I(
"%s._onEndWork()", w);
165 if(w.isFlag(tworker<void, T>::GUARD)) {
167 BY_I(
"◀ %s ends!", w);
Thread execution context for byeol runtime
Definition thread.hpp:46
Base worker template for processing tasks
Definition tworker.hpp:58