worker.hpp
Go to the documentation of this file.
1
2#pragma once
3
4#include "core/type/ntype.hpp"
7
8namespace by {
9
10#define myExErr_1(code) exErr(errCode::code, getReport())
11#define myExErr_2(me, code) exErr(me, errCode::code, getReport())
12#define myExErr_3(me, code, a1) exErr(me, errCode::code, getReport(), a1)
13#define myExErr_4(me, code, a1, a2) exErr(me, errCode::code, getReport(), a1, a2)
14#define myExErr_5(me, code, a1, a2, a3) exErr(me, errCode::code, getReport(), a1, a2, a3)
15#define myExErr(...) BY_OVERLOAD(myExErr, __VA_ARGS__)
16
17#define myExWarn_1(code) exErr(errCode::code, getReport())
18#define myExWarn_2(me, code) exErr(me, errCode::code, getReport())
19#define myExWarn_3(me, code, a1) exErr(me, errCode::code, getReport(), a1)
20#define myExWarn_4(me, code, a1, a2) exErr(me, errCode::code, getReport(), a1, a2)
21#define myExWarn_5(me, code, a1, a2, a3) exErr(me, errCode::code, getReport(), a1, a2, a3)
22#define myExWarn(...) BY_OVERLOAD(myExWarn, __VA_ARGS__)
23
28 template <typename R, typename T> class worker: public typeProvidable, public clonable {
29 BY(ADT(worker))
30 template <typename R1, typename T1> friend struct workerAdapter;
31 typedef R RetType;
32
33 public:
34 enum logFlag {
35 LOG_ON_EX = 1, // logs the err instance when it just got reported.
36 DUMP_ON_EX = 1 << 1, // log and leave callstack from an err instance when it just got reported.
37 GUARD = 1 << 2, // logs when func in, out.
38 INTERNAL = 1 << 3, // logs all except above case.
39 LOG_ON_END = 1 << 4, // log all report info when the work ends.
40 DUMP_ON_END = 1 << 5, // log and leave callstack for all report info when the work ends.
41#if BY_IS_DBG
42 DEFAULT = DUMP_ON_EX | GUARD | INTERNAL | LOG_ON_END
43#else
44 DEFAULT = LOG_ON_EX
45#endif
46 };
47
48 public:
49 worker();
50
51 public:
52 errReport& getReport();
53 const errReport& getReport() const BY_CONST_FUNC(getReport())
54 me& setReport(errReport& rpt);
55
56 me& setFlag(nint newFlag);
57 me& addFlag(nint flag);
58 me& delFlag(nint clear);
59 nbool isFlag(nint flag) const;
60 nint getFlag() const;
61
62 me& setTask(const T& root);
63 me& setTask(const T* it) BY_SIDE_FUNC(it, setTask(*it), *this);
64 T* getTask();
65 const T* getTask() const BY_CONST_FUNC(getTask())
66
67 virtual void rel();
68
69 R work();
70
71 const area& getArea() const BY_CONST_FUNC(_getArea())
72
73 nbool isOk() const;
74
75 protected:
76 virtual void _prepare();
77
78 void _report(baseErr* e);
79
80 virtual void _onEndWork();
81 virtual R _onWork() = 0;
82
83 area& _getArea();
84
85 void _onEndErrReport(const errReport& rpt) const;
86
87 private:
88 void _rel();
89
90 private:
91 tstr<errReport> _rpt;
92 area _area;
93 tstr<T> _task;
94 nint _logFlag;
95 };
96} // namespace by
Base class for all error types.
Definition: baseErr.hpp:12
Interface for objects that can be cloned.
Definition: clonable.hpp:12
Error reporting and collection system.
Definition: errReport.hpp:14
Definition: flag.hpp:15
Strong reference smart pointer with strict type checking.
Definition: tstr.hpp:13
Interface for objects that can provide their type information.
Definition: typeProvidable.hpp:12
Base worker template for processing tasks.
Definition: worker.hpp:28
Source code area tracking structure.
Definition: point.hpp:27
Definition: worker.inl:7