71 template<
template<
typename>
typename kind_of,
ev::event_c event_t,
76 insert<kind_of, event_t>(
make_hf(mem_fn, self));
84 template<
template<
typename>
typename kind_of,
event_c event_t>
88 insert(0, std::move(hf));
92 template<
template<
typename>
typename kind_of, event_c event_t>
93 requires kind_c<kind_of>
96 auto lock() {
return std::unique_lock{mtx_m}; }
98 bool has_handler_for(
int s_id, std::size_t spec_hash)
100 return handlers_m[s_id].contains(spec_hash);
103 const std::type_info*
const type_for(std::size_t spec_hash)
105 return types_m[spec_hash];
108 const job_handler_f& handler_for(
int s_id, std::size_t spec_hash)
110 return handlers_m[s_id][spec_hash];
113 template<
template<
typename>
typename kind_of, event_c event_t>
114 requires kind_c<kind_of>
117 auto spec_hash = spec<kind_of<event_t>>::hash;
119 if (!handlers_m[s_id].try_emplace(spec_hash, std::move(hf)).second)
120 throw std::runtime_error(std::format(
121 "Unable to emplace the handler_f for Socket #{} and Spec {:X}", s_id,
125 types_m[spec_hash] = &
typeid(kind_of<event_t>);
128 spec<kind_of<event_t>>{});
132 std::unordered_map<int, std::unordered_map<std::size_t, job_handler_f>>
134 std::unordered_map<std::size_t, const std::type_info*>