X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fdispatcher.hh;h=98a8626fd8f04f370c632209b053c40d77bb0953;hb=67cd07e55d5ec908c246ae543e480d367b61d6b3;hp=31bed90c7eed6030ae55bae2d5bdf6a2530009c2;hpb=caac677710724849651381d11577f61dd9618bcf;p=lilypond.git diff --git a/lily/include/dispatcher.hh b/lily/include/dispatcher.hh index 31bed90c7e..98a8626fd8 100644 --- a/lily/include/dispatcher.hh +++ b/lily/include/dispatcher.hh @@ -22,33 +22,38 @@ #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 * const 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); }; -DECLARE_UNSMOB (Dispatcher, dispatcher); #endif // DISPATCHER_HH