@@ -336,10 +336,13 @@ uint32_t BroadcasterManager::RegisterListenerForEvents(
336
336
collection::iterator iter = m_event_map.begin (), end_iter = m_event_map.end ();
337
337
uint32_t available_bits = event_spec.GetEventBits ();
338
338
339
+ auto class_matches = [&event_spec](const event_listener_key &input) -> bool {
340
+ return input.first .GetBroadcasterClass () ==
341
+ event_spec.GetBroadcasterClass ();
342
+ };
343
+
339
344
while (iter != end_iter &&
340
- (iter = find_if (iter, end_iter,
341
- BroadcasterClassMatches (
342
- event_spec.GetBroadcasterClass ()))) != end_iter) {
345
+ (iter = find_if (iter, end_iter, class_matches)) != end_iter) {
343
346
available_bits &= ~((*iter).first .GetEventBits ());
344
347
iter++;
345
348
}
@@ -362,15 +365,22 @@ bool BroadcasterManager::UnregisterListenerForEvents(
362
365
if (m_listeners.erase (listener_sp) == 0 )
363
366
return false ;
364
367
365
- ListenerMatchesAndSharedBits predicate (event_spec, listener_sp);
368
+ auto listener_matches_and_shared_bits =
369
+ [&listener_sp, &event_spec](const event_listener_key &input) -> bool {
370
+ return input.first .GetBroadcasterClass () ==
371
+ event_spec.GetBroadcasterClass () &&
372
+ (input.first .GetEventBits () & event_spec.GetEventBits ()) != 0 &&
373
+ input.second == listener_sp;
374
+ };
366
375
std::vector<BroadcastEventSpec> to_be_readded;
367
376
uint32_t event_bits_to_remove = event_spec.GetEventBits ();
368
377
369
378
// Go through the map and delete the exact matches, and build a list of
370
379
// matches that weren't exact to re-add:
371
380
while (true ) {
372
381
collection::iterator iter, end_iter = m_event_map.end ();
373
- iter = find_if (m_event_map.begin (), end_iter, predicate);
382
+ iter = find_if (m_event_map.begin (), end_iter,
383
+ listener_matches_and_shared_bits);
374
384
if (iter == end_iter) {
375
385
break ;
376
386
}
@@ -397,9 +407,13 @@ ListenerSP BroadcasterManager::GetListenerForEventSpec(
397
407
const BroadcastEventSpec &event_spec) const {
398
408
std::lock_guard<std::recursive_mutex> guard (m_manager_mutex);
399
409
410
+ auto event_spec_matches =
411
+ [&event_spec](const event_listener_key &input) -> bool {
412
+ return input.first .IsContainedIn (event_spec);
413
+ };
414
+
400
415
collection::const_iterator iter, end_iter = m_event_map.end ();
401
- iter = find_if (m_event_map.begin (), end_iter,
402
- BroadcastEventSpecMatches (event_spec));
416
+ iter = find_if (m_event_map.begin (), end_iter, event_spec_matches);
403
417
if (iter != end_iter)
404
418
return (*iter).second ;
405
419
@@ -408,17 +422,25 @@ ListenerSP BroadcasterManager::GetListenerForEventSpec(
408
422
409
423
void BroadcasterManager::RemoveListener (Listener *listener) {
410
424
std::lock_guard<std::recursive_mutex> guard (m_manager_mutex);
411
- ListenerMatchesPointer predicate (listener);
425
+ auto listeners_predicate =
426
+ [&listener](const lldb::ListenerSP &input) -> bool {
427
+ return input.get () == listener;
428
+ };
429
+
412
430
listener_collection::iterator iter = m_listeners.begin (),
413
431
end_iter = m_listeners.end ();
414
432
415
- iter = std::find_if (iter, end_iter, predicate );
433
+ iter = std::find_if (iter, end_iter, listeners_predicate );
416
434
if (iter != end_iter)
417
435
m_listeners.erase (iter);
418
436
419
437
while (true ) {
438
+ auto events_predicate =
439
+ [&listener](const event_listener_key &input) -> bool {
440
+ return input.second .get () == listener;
441
+ };
420
442
collection::iterator iter, end_iter = m_event_map.end ();
421
- iter = find_if (m_event_map.begin (), end_iter, predicate );
443
+ iter = find_if (m_event_map.begin (), end_iter, events_predicate );
422
444
if (iter == end_iter)
423
445
break ;
424
446
@@ -428,14 +450,18 @@ void BroadcasterManager::RemoveListener(Listener *listener) {
428
450
429
451
void BroadcasterManager::RemoveListener (const lldb::ListenerSP &listener_sp) {
430
452
std::lock_guard<std::recursive_mutex> guard (m_manager_mutex);
431
- ListenerMatches predicate (listener_sp);
453
+
454
+ auto listener_matches =
455
+ [&listener_sp](const event_listener_key &input) -> bool {
456
+ return input.second == listener_sp;
457
+ };
432
458
433
459
if (m_listeners.erase (listener_sp) == 0 )
434
460
return ;
435
461
436
462
while (true ) {
437
463
collection::iterator iter, end_iter = m_event_map.end ();
438
- iter = find_if (m_event_map.begin (), end_iter, predicate );
464
+ iter = find_if (m_event_map.begin (), end_iter, listener_matches );
439
465
if (iter == end_iter)
440
466
break ;
441
467
@@ -449,10 +475,13 @@ void BroadcasterManager::SignUpListenersForBroadcaster(
449
475
450
476
collection::iterator iter = m_event_map.begin (), end_iter = m_event_map.end ();
451
477
478
+ auto class_matches = [&broadcaster](const event_listener_key &input) -> bool {
479
+ return input.first .GetBroadcasterClass () ==
480
+ broadcaster.GetBroadcasterClass ();
481
+ };
482
+
452
483
while (iter != end_iter &&
453
- (iter = find_if (iter, end_iter,
454
- BroadcasterClassMatches (
455
- broadcaster.GetBroadcasterClass ()))) != end_iter) {
484
+ (iter = find_if (iter, end_iter, class_matches)) != end_iter) {
456
485
(*iter).second ->StartListeningForEvents (&broadcaster,
457
486
(*iter).first .GetEventBits ());
458
487
iter++;
0 commit comments