signaler.hpp
Go to the documentation of this file.
1
2#pragma once
3
4#include "core/common.hpp"
5
6namespace by {
7
8 struct nerr;
9
10 typedef nerr* (*errMaker)(nint);
11 typedef void (*sigFunc)(const nerr&);
12 typedef std::function<void(const nerr&)> sigHandler;
13
17 struct _nout sig {
18 BY(ME(sig))
19
20 public:
21 nbool operator==(const sig& rhs) const;
22 nbool operator!=(const sig& rhs) const;
23
24 public:
25 int code;
26 errMaker maker;
27 };
28
32 class _nout signaler {
33 BY(ME(signaler))
34
35 private:
36 signaler();
37
38 public:
39 void addSignal(const sigHandler& closure);
40 void delSignal(const sigHandler& closure);
41 void relSignal();
42
44 void onSignal(nint code);
45
46 static signaler& get();
47
48 private:
49 void _setSignal(void (*csignalHandler)(nint));
50 const nerr* _getErrBy(nint code) const;
51
52 private:
53 std::vector<sigHandler> _closures;
54 };
55} // namespace by
func closure with captured object scope
Definition: closure.hpp:19
Signal handler manager.
Definition: signaler.hpp:32
void onSignal(nint code)
report that signal has occured. and terminate the process after reporting.
Definition: nerr.hpp:18
Signal structure for error handling.
Definition: signaler.hpp:17