(t->*callback) (Grob_info (e, g));
return SCM_UNSPECIFIED;
}
+ template <class T, void (T::*callback)(Grob_info)>
+ static SCM ack_find_base ()
+ { return Callback2_wrapper::make_smob<ack_trampoline<T, callback> > (); }
/**
Announce element. Default: pass on to daddy. Utility
/* end #define */
#define TRANSLATOR_INHERIT(BASE) \
- using BASE::method_finder
+ using BASE::method_finder; \
+ using BASE::ack_finder;
#define DECLARE_TRANSLATOR_CALLBACKS(NAME) \
template <void (NAME::*mf)()> \
{ \
return Callback_wrapper::make_smob<trampoline<NAME, mf> > (); \
} \
+ template <void (NAME::*callback)(Grob_info)> \
+ static SCM ack_finder () { return ack_find_base<NAME, callback> (); } \
/* end #define */
/*
static SCM
method_finder () { return SCM_UNDEFINED; }
+ // Overriden in Engraver.
+ template <class T, void (T::*callback)(Grob_info)>
+ static SCM
+ ack_find_base () { return SCM_UNDEFINED; }
+
+ template <void (Translator::*)(Grob_info)>
+ static SCM
+ ack_finder () { return SCM_UNDEFINED; }
+
virtual void derived_mark () const;
static SCM event_class_symbol (const char *ev_class);
SCM static_translator_description (const char *grobs,
SCM &ack_hash);
#define ADD_ACKNOWLEDGER(CLASS, NAME) \
- add_acknowledger (Callback2_wrapper::make_smob \
- <ack_trampoline<CLASS, &CLASS::acknowledge_ ## NAME> > (), \
+ add_acknowledger (ack_finder<&CLASS::acknowledge_ ## NAME> (), \
#NAME, acknowledge_static_array_drul_[START])
#define ADD_END_ACKNOWLEDGER(CLASS, NAME) \
- add_acknowledger (Callback2_wrapper::make_smob \
- <ack_trampoline<CLASS, &CLASS::acknowledge_end_ ## NAME> > (), \
+ add_acknowledger (ack_finder<&CLASS::acknowledge_end_ ## NAME> (), \
#NAME, acknowledge_static_array_drul_[STOP])
+
/*
Implement the method cl::listen_##m, and make it listen to stream
events of class m.