[Commits] [wesnoth/wesnoth] 2045b6: Game Events: refactored event handler storage

GitHub noreply at github.com
Tue Nov 28 11:08:48 UTC 2017


  Branch: refs/heads/event_handler_list_refactor_pass_2
  Home:   https://github.com/wesnoth/wesnoth
  Commit: 2045b6739e0f4e5443ea680870412f2a5b9a6518
      https://github.com/wesnoth/wesnoth/commit/2045b6739e0f4e5443ea680870412f2a5b9a6518
  Author: Charles Dang <exodia339 at gmail.com>
  Date:   2017-11-28 (Tue, 28 Nov 2017)

  Changed paths:
    M src/game_events/handlers.cpp
    M src/game_events/handlers.hpp
    M src/game_events/manager.cpp
    M src/game_events/manager.hpp
    M src/game_events/manager_impl.cpp
    M src/game_events/manager_impl.hpp
    M src/game_events/pump.cpp
    R src/utils/smart_list.hpp

  Log Message:
  -----------
  Game Events: refactored event handler storage

This throws out the custom smart_list class in favor of a plain std::list. It also greatly simplifies
a few things. First, event handlers no longer remove themselves from the main list in event_handlers.
Now they just flag themselves as disabled (which means they will never execute once marked) and cleaned
up later in a newly added cleanup stage. This means a handler no longer needs to keep its index in the
active handler vector.

This removal of reliance on indices also means I could add the aforementioned cleanup stage. With the
smart_list code, event handlers were never actually removed from the active vector, nor any weak_ptrs
pointing to them removed either. This wasn't exactly a problem, since the handlers were stored via
shared_ptrs which would then simply be null after one deleted itself. Still, it's cleaner to drop any
invalid ones (and unlockable weak_ptrs) from any relevant containers. I've opted to do this in
manager::execute_on_events. Seems a good enough place as any.

The net result of this is the code is much cleaner. We're able to get rid of a bunch of unnecessary
feelers into various classes. This also makes the manager::iteration dereference code a lot easier
to understand. There certainly could be further refactoring, but I think this is a good start.





More information about the Commits mailing list