X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fdispatcher.hh;h=f0eb30ba6dc41d8d8ad392e362d6ec480a7fa49d;hb=512fc5ece5ff691520bf93badaa0a77a46370839;hp=1d3583bb673f2a7faaf588feeee90c7133a44f8c;hpb=5bbfc22fce036b9b69df5e420de93e11da23c05e;p=lilypond.git diff --git a/lily/include/dispatcher.hh b/lily/include/dispatcher.hh index 1d3583bb67..f0eb30ba6d 100644 --- a/lily/include/dispatcher.hh +++ b/lily/include/dispatcher.hh @@ -22,31 +22,37 @@ #include "listener.hh" #include "stream-event.hh" +#include "smobs.hh" -class Dispatcher +class Dispatcher : public Smob { +public: + int print_smob (SCM, scm_print_state *) const; + SCM mark_smob () const; + static const char type_p_name_[]; + virtual ~Dispatcher (); +private: /* Hash table. Each event-class maps to a list of listeners. */ SCM listeners_; /* alist of dispatchers that we listen to. Each entry is a (dist . priority) pair. */ SCM dispatchers_; SCM listen_classes_; - DECLARE_LISTENER (dispatch); + void dispatch (SCM); /* priority counter. Listeners with low priority receive events first. */ int priority_count_; - void internal_add_listener (Listener, SCM event_class, int priority); + void internal_add_listener (SCM callback, SCM event_class, int priority); public: Dispatcher (); void broadcast (Stream_event *ev); bool is_listened_class (SCM); SCM listened_types (); void add_listener (Listener, SCM event_class); + void add_listener (SCM callback, SCM event_class); void remove_listener (Listener, SCM event_class); void register_as_listener (Dispatcher *dist); void unregister_as_listener (Dispatcher *dist); -protected: - DECLARE_SMOBS (Dispatcher); };