From 60793c7aa6dbf66d6f823ad2287148d1902c7bf3 Mon Sep 17 00:00:00 2001 From: Charles Dang Date: Tue, 28 Nov 2017 19:53:29 +1100 Subject: [PATCH] C'est fou >_< --- src/game_events/manager.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/game_events/manager.cpp b/src/game_events/manager.cpp index 30e2e29780f2..0ea8b45c3874 100644 --- a/src/game_events/manager.cpp +++ b/src/game_events/manager.cpp @@ -145,6 +145,8 @@ static handler_ptr lock_ptr(const handler_list& list, handler_list::iterator ite if(iter != list.end()) { if(handler_ptr ptr = iter->lock()) { return ptr; + } else { + std::cerr << "We're not supposed to be here..."; } } @@ -159,22 +161,25 @@ handler_ptr manager::iteration::operator*() { // Get the candidate for the current element from the main list. handler_ptr main_ptr = lock_ptr(main_list_, main_it_); - handler_vec::size_type main_index = ptr_index(main_ptr); + //handler_vec::size_type main_index = ptr_index(main_ptr); // Get the candidate for the current element from the var list. handler_ptr var_ptr = lock_ptr(var_list_, var_it_); - // (Loop while var_ptr would be chosen over main_ptr, but the name does not match.) - while(var_ptr && var_ptr->index() < main_index && !var_ptr->matches_name(event_name_, gamedata_)) { + // If we have a variable-name event but the name doesn't match, keep iterating + // until we find a match. If we reach var_list_ end, var_ptr will be nullptr. + while(var_ptr /*&& var_ptr->index() < main_index*/ && !var_ptr->matches_name(event_name_, gamedata_)) { var_ptr = lock_ptr(var_list_, ++var_it_); } - handler_vec::size_type var_index = ptr_index(var_ptr); + //handler_vec::size_type var_index = ptr_index(var_ptr); // Which list? (Index ties go to the main list.) - current_is_known_ = main_index < end_ || var_index < end_; - //current_is_known_ = main_ptr != nullptr || var_ptr != nullptr; - main_is_current_ = main_index <= var_index; + //current_is_known_ = main_index < end_ || var_index < end_; + //main_is_current_ = main_index <= var_index; + + current_is_known_ = main_ptr != nullptr || var_ptr != nullptr; + main_is_current_ = var_ptr == nullptr; if(!current_is_known_) { return nullptr; // End of list; return a null pointer.