11 assert(listeners.empty());
16 return contains(listeners, listener);
21 assert(!isRegistered(&listener));
22 listeners.push_back(&listener);
33 recorder = &recorder_;
39 assert(recorder == &recorder_);
43void StateChangeDistributor::distribute(
const StateChange& event)
50 auto copy = listeners;
51 for (
auto& l :
copy) {
52 if (isRegistered(l)) {
55 l->signalStateChange(event);
65 for (
auto& l : listeners) {
void stopReplay(EmuTime::param time) noexcept
void unregisterRecorder(ReverseManager &recorder)
void registerListener(StateChangeListener &listener)
(Un)registers the given object to receive state change events.
void registerRecorder(ReverseManager &recorder)
(Un)registers the given object to receive state change events.
void unregisterListener(StateChangeListener &listener)
void stopReplay(EmuTime::param time)
Explicitly stop replay.
~StateChangeDistributor()
Base class for all external MSX state changing events.
This file implemented 3 utility functions:
auto copy(InputRange &&range, OutputIter out)
void move_pop_back(VECTOR &v, typename VECTOR::iterator it)
Erase the pointed to element from the given vector.
auto rfind_unguarded(RANGE &range, const VAL &val, Proj proj={})
Similar to the find(_if)_unguarded functions above, but searches from the back to front.
constexpr bool contains(ITER first, ITER last, const VAL &val)
Check if a range contains a given value, using linear search.