12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #pragma once
- #include "forward.hpp"
- #include <memory>
- namespace rotor {
- struct timer_handler_base_t {
-
- actor_base_t *owner;
-
- request_id_t request_id;
-
- timer_handler_base_t(actor_base_t *owner_, request_id_t request_id_) noexcept
- : owner{owner_}, request_id{request_id_} {}
-
- virtual void trigger(bool cancelled) noexcept = 0;
- virtual ~timer_handler_base_t() = default;
- };
- using timer_handler_ptr_t = std::unique_ptr<timer_handler_base_t>;
- template <typename Object, typename Method> struct timer_handler_t : timer_handler_base_t {
-
- Object *object;
-
- Method method;
-
- timer_handler_t(actor_base_t *owner_, request_id_t request_id_, Object *object_, Method method_) noexcept
- : timer_handler_base_t{owner_, request_id_}, object{object_}, method{std::forward<Method>(method_)} {}
- void trigger(bool cancelled) noexcept override { std::invoke(method, object, request_id, cancelled); }
- };
- }
|