MCPcopy Create free account
hub / github.com/a2flo/floor / remove_event_handler

Method remove_event_handler

core/event.cpp:405–426  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

403}
404
405void event::remove_event_handler(const handler& handler_) {
406 int cas_zero = 0;
407 while(!handlers_lock.compare_exchange_strong(cas_zero, handlers_locked)) {
408 this_thread::yield();
409 }
410
411 for(auto handler_iter = handlers.cbegin(); handler_iter != handlers.cend(); ) {
412 // good old pointer comparison ...
413 if(&handler_iter->second == &handler_) {
414 handler_iter = handlers.erase(handler_iter);
415 }
416 else ++handler_iter;
417 }
418 for(auto handler_iter = internal_handlers.cbegin(); handler_iter != internal_handlers.cend(); ) {
419 if(&handler_iter->second == &handler_) {
420 handler_iter = internal_handlers.erase(handler_iter);
421 }
422 else ++handler_iter;
423 }
424
425 handlers_lock = 0;
426}
427
428void event::remove_event_types_from_handler(const handler& handler_, const set<EVENT_TYPE>& types) {
429 int cas_zero = 0;

Callers 1

destroyMethod · 0.80

Calls 4

cbeginMethod · 0.45
cendMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected