when.hpp
Go to the documentation of this file.
1
2#pragma once
3
4#include "core/common/dep.hpp"
5
6namespace by {
7
8 class errReport;
9 class node;
10
11#undef __WHEN_OBJECT__
12#define __WHEN_OBJECT__ __core_when__
13
17 class _nout __WHEN_OBJECT__: public __clog_when__ {
18 BY(ME(__WHEN_OBJECT__, __clog_when__))
19
20 public:
21 static const me& get();
22
23 template <typename... Ts> const me& exErr(int code, const Ts&... args) const {
24 _addNewErr(errLv::ERR, code, &_getDefault(), __convert__((const Ts&) args).unwrap()...);
25 return *this;
26 }
27
28 template <typename... Ts> const me& exErr(const point& src, int code, const Ts&... args) const {
29 _addNewErr(errLv::ERR, src, code, &_getDefault(), __convert__((const Ts&) args).unwrap()...);
30 return *this;
31 }
32
33 template <typename... Ts> const me& exErr(const node& src, int code, const Ts&... args) const {
34 _addNewErr(errLv::ERR, _getPosFrom(src), code, &_getDefault(), __convert__((const Ts&) args).unwrap()...);
35 return *this;
36 }
37
38 template <typename... Ts> const me& exErr(int code, errReport& rpt, const Ts&... args) const {
39 _addNewErr(errLv::ERR, code, &rpt, __convert__((const Ts&) args).unwrap()...);
40 return *this;
41 }
42
43 template <typename... Ts> const me& exErr(const point& src, int code, errReport& rpt, const Ts&... args) const {
44 _addNewErr(errLv::ERR, src, code, &rpt, __convert__((const Ts&) args).unwrap()...);
45 return *this;
46 }
47
48 template <typename... Ts> const me& exErr(const node& src, int code, errReport& rpt, const Ts&... args) const {
49 _addNewErr(errLv::ERR, _getPosFrom(src), code, &rpt, __convert__((const Ts&) args).unwrap()...);
50 return *this;
51 }
52
53 template <typename... Ts> const me& exWarn(int code, const Ts&... args) const {
54 _addNewErr(errLv::ERR, code, &_getDefault(), __convert__((const Ts&) args).unwrap()...);
55 return *this;
56 }
57
58 template <typename... Ts> const me& exWarn(const point& src, int code, const Ts&... args) const {
59 _addNewErr(errLv::WARN, src, code, &_getDefault(), __convert__((const Ts&) args).unwrap()...);
60 return *this;
61 }
62
63 template <typename... Ts> const me& exWarn(const node& src, int code, const Ts&... args) const {
64 _addNewErr(errLv::WARN, _getPosFrom(src), code, &_getDefault(), __convert__((const Ts&) args).unwrap()...);
65 return *this;
66 }
67
68 template <typename... Ts> const me& exWarn(int code, errReport& rpt, const Ts&... args) const {
69 _addNewErr(errLv::WARN, code, &rpt, __convert__((const Ts&) args).unwrap()...);
70 return *this;
71 }
72
73 template <typename... Ts>
74 const me& exWarn(const point& src, int code, errReport& rpt, const Ts&... args) const {
75 _addNewErr(errLv::WARN, src, code, &rpt, __convert__((const Ts&) args).unwrap()...);
76 return *this;
77 }
78
79 template <typename... Ts> const me& exWarn(const node& src, int code, errReport& rpt, const Ts&... args) const {
80 _addNewErr(errLv::WARN, _getPosFrom(src), code, &rpt, __convert__((const Ts&) args).unwrap()...);
81 return *this;
82 }
83
84 private:
85 errReport& _getDefault() const;
86 const point& _getPosFrom(const node& src) const;
87 const point& _getPosFrom(const node* src) const;
88 void _addNewErr(errLv::level lv, int code, errReport* rpt, ...) const;
89 void _addNewErr(errLv::level lv, const point& src, int code, errReport* rpt, ...) const;
90 };
91} // namespace by