38 #include "final/util/fdata.h" 39 #include "final/util/fstring.h" 55 using std::runtime_error::runtime_error;
74 using handler_t = std::function<void(Monitor*, short)>;
104 virtual auto getClassName()
const ->
FString;
105 auto getEvents()
const -> short;
106 auto getFileDescriptor()
const -> int;
107 template <
typename T>
108 auto getUserContext()
const -> clean_fdata_t<T>&;
111 auto isActive()
const -> bool;
114 virtual void resume();
115 virtual void suspend();
119 static constexpr
int NO_FILE_DESCRIPTOR{-1};
122 void setFileDescriptor (
int);
123 void setEvents (
short);
124 void setHandler (handler_t&&);
125 template <
typename T>
126 void setUserContext (T&&);
127 void setInitialized();
130 auto isInitialized()
const -> bool;
133 virtual void trigger (
short);
137 using FDataAccessPtr = std::shared_ptr<FDataAccess>;
142 int fd{NO_FILE_DESCRIPTOR};
145 FDataAccessPtr user_context{
nullptr};
146 bool monitor_initialized{
false};
154 inline auto Monitor::getClassName()
const ->
FString 155 {
return "Monitor"; }
158 inline auto Monitor::getEvents()
const ->
short 162 inline auto Monitor::getFileDescriptor()
const ->
int 166 template <
typename T>
167 auto Monitor::getUserContext()
const -> clean_fdata_t<T>&
169 static T empty_lvalue = T{};
176 inline auto Monitor::isActive()
const ->
bool 180 inline void Monitor::resume()
184 inline void Monitor::suspend()
188 inline void Monitor::trigger (
short return_events)
191 handler (
this, return_events);
195 inline void Monitor::setFileDescriptor (
int file_descriptor)
196 { fd = file_descriptor; }
199 inline void Monitor::setEvents (
short ev)
203 inline void Monitor::setHandler (handler_t&& hdl)
204 { handler = std::move(hdl); }
207 template <
typename T>
208 inline void Monitor::setUserContext (T&& uc)
210 user_context.reset(makeFData(std::forward<T>(uc)));
214 inline void Monitor::setInitialized()
215 { monitor_initialized =
true; }
218 inline auto Monitor::isInitialized()
const ->
bool 219 {
return monitor_initialized; }
Definition: eventloop.h:48
Definition: class_template.cpp:25