#ifndef SIGNALHANDLE_WNM4OBKG
|
#define SIGNALHANDLE_WNM4OBKG
|
|
#include <signal.h>
|
#include <functional>
|
#include <vector>
|
|
typedef std::function<void (int)> SigFunc;
|
// return 0 on success.
|
int CatchSignals(const int signals[], const size_t count, SigFunc f);
|
int WaitForSignals(const int signals[], const size_t count, SigFunc f = SigFunc());
|
|
template <size_t N> inline
|
int CatchSignals(const int (& signals)[N], SigFunc f) {
|
return CatchSignals(signals, N, f);
|
}
|
|
template <class ...T> inline
|
void CatchSignals(std::initializer_list<int> list, T...t)
|
{
|
std::vector<int> arr(list.begin(), list.end());
|
CatchSignals(arr.data(), arr.size(), t...);
|
}
|
|
template <size_t N> inline
|
int WaitForSignals(const int (&signals)[N]) {
|
return WaitForSignals(signals, N, SigFunc());
|
}
|
|
template <size_t N, class Func> inline
|
int WaitForSignals(int (&signals)[N], Func f) {
|
return WaitForSignals(signals, N, f);
|
}
|
|
template <class ...T> inline
|
void WaitForSignals(std::initializer_list<int> list, T...t)
|
{
|
std::vector<int> arr(list.begin(), list.end());
|
WaitForSignals(arr.data(), arr.size(), t...);
|
}
|
#endif // end of include guard: SIGNALHANDLE_WNM4OBKG
|