cpp-terminal 1.0.0
Small C++ library for writing multiplatform terminal applications
Loading...
Searching...
No Matches
Term::Private::Signals Class Reference

#include <cpp-terminal/private/signals.hpp>

Public Member Functions

 Signals (const Terminal &) noexcept
 
 ~Signals () noexcept=default
 
void setHandler (const sighandler_t &handler) noexcept
 
void reset_and_raise (const int &sign) noexcept
 

Static Public Member Functions

static void clean_terminal () noexcept
 

Private Attributes

std::vector< sighandler_tm_handlers
 

Static Private Attributes

static const std::size_t m_signals_number {NSIG - 1}
 
static const Term::Terminalm_term {nullptr}
 

Detailed Description

Definition at line 24 of file signals.hpp.

Constructor & Destructor Documentation

◆ Signals()

Term::Private::Signals::Signals ( const Terminal & terminal)
noexcept

Definition at line 62 of file signals.cpp.

63{
66 for(std::size_t signal = 0; signal != m_signals_number; ++signal)
67 {
68 //if(std::find(ignore.begin(),ignore.end(),signal)==ignore.end())
69 //{
70 sighandler_t old = std::signal(signal, SIG_DFL);
71 //sighandler_t dumb=std::signal(signal, old);
72 m_handlers.push_back(old);
73 //}
74 //else
75 //{
76 // std::signal(signal, SIG_IGN);
77 // m_han.push_back(std::signal(signal, SIG_IGN));
78 // }
79 }
80}
static const std::size_t m_signals_number
Definition signals.hpp:43
std::vector< sighandler_t > m_handlers
Definition signals.hpp:35
static const Term::Terminal * m_term
Definition signals.hpp:60
Term::Terminal & terminal
Definition terminal.cpp:19
void(*)(int) sighandler_t
Definition signals.hpp:14

◆ ~Signals()

Term::Private::Signals::~Signals ( )
defaultnoexcept

Member Function Documentation

◆ clean_terminal()

void Term::Private::Signals::clean_terminal ( )
staticnoexcept

Definition at line 41 of file signals.cpp.

41{ const_cast<Term::Terminal*>(m_term)->clean(); }

◆ reset_and_raise()

void Term::Private::Signals::reset_and_raise ( const int & sign)
noexcept

Definition at line 82 of file signals.cpp.

83{
85 const static std::vector<int> termin{
86#if defined(SIGHUP)
87 SIGHUP,
88#endif
89#if defined(SIGINT)
90 SIGINT,
91#endif
92#if defined(SIGQUIT)
93 SIGQUIT,
94#endif
95#if defined(SIGILL)
96 SIGILL,
97#endif
98#if defined(SIGTRAP)
99 SIGTRAP,
100#endif
101#if defined(SIGABRT)
102 SIGABRT,
103#endif
104#if defined(SIGIOT)
105 SIGIOT,
106#endif
107#if defined(SIGBUS)
108 SIGBUS,
109#endif
110#if defined(SIGFPE)
111 SIGFPE,
112#endif
113#if defined(SIGKILL)
114 SIGKILL,
115#endif
116#if defined(SIGUSR1)
117 SIGUSR1,
118#endif
119#if defined(SIGSEGV)
120 SIGSEGV,
121#endif
122#if defined(SIGUSR2)
123 SIGUSR2,
124#endif
125#if defined(SIGPIPE)
126 SIGPIPE,
127#endif
128#if defined(SIGALRM)
129 SIGALRM,
130#endif
131#if defined(SIGSTKFLT)
132 SIGSTKFLT,
133#endif
134#if defined(SIGCONT)
135 SIGCONT,
136#endif
137#if defined(SIGXCPU)
138 SIGXCPU,
139#endif
140#if defined(SIGXFSZ)
141 SIGXFSZ,
142#endif
143#if defined(SIGVTALRM)
144 SIGVTALRM,
145#endif
146#if defined(SIGPROF)
147 SIGPROF,
148#endif
149#if defined(SIGIO)
150 SIGIO,
151#endif
152#if defined(SIGPOLL)
153 SIGPOLL,
154#endif
155#if defined(SIGPWR)
156 SIGPWR,
157#endif
158#if defined(SIGSYS)
159 SIGSYS,
160#endif
161#if defined(SIGUNUSED)
162 SIGUNUSED,
163#endif
164#if defined(SIGUNUSED)
165 SIGUNUSED,
166#endif
167#if defined(SIGTERM)
168 SIGTERM
169#endif
170 };
171 if(std::find(termin.begin(), termin.end(), sign) != termin.end())
172 {
173 sighandler_t old = std::signal(sign, m_handlers[sign]);
174 old = std::signal(sign, m_handlers[sign]);
175 std::raise(sign);
176 }
177}
static void clean_terminal() noexcept
Definition signals.cpp:41

◆ setHandler()

void Term::Private::Signals::setHandler ( const sighandler_t & handler)
noexcept

Definition at line 45 of file signals.cpp.

46{
47 for(std::size_t signal = 0; signal != m_signals_number; ++signal)
48 {
49#ifdef _WIN32
50 if(signal != SIGINT) sighandler_t hand = std::signal(signal, handler);
51#else
52 sighandler_t hand = std::signal(signal, handler);
53#endif
54 }
55#ifdef _WIN32
56 SetConsoleCtrlHandler(consoleHandler, TRUE);
57#endif
58}

Member Data Documentation

◆ m_handlers

std::vector<sighandler_t> Term::Private::Signals::m_handlers
private

Definition at line 35 of file signals.hpp.

◆ m_signals_number

const std::size_t Term::Private::Signals::m_signals_number {NSIG - 1}
staticprivate

Definition at line 43 of file signals.hpp.

◆ m_term

const Term::Terminal * Term::Private::Signals::m_term {nullptr}
staticprivate

Definition at line 60 of file signals.hpp.

76{
77
78class Terminal;
79
80namespace Private
81{
82
83class Signals
84{
85public:
86 Signals(const Terminal&) noexcept;
87 ~Signals() noexcept = default;
88 void setHandler(const sighandler_t& handler) noexcept;
89 void reset_and_raise(const int& sign) noexcept;
90 static void clean_terminal() noexcept;
91
92private:
93 const static std::size_t m_signals_number;
94 std::vector<sighandler_t> m_handlers;
95 const static Term::Terminal* m_term;
96};
97
98} // namespace Private
99
100} // namespace Term

The documentation for this class was generated from the following files: