]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4840: Make Translator/Performer/Engraver abstract base classes
authorDavid Kastrup <dak@gnu.org>
Mon, 2 May 2016 14:26:20 +0000 (16:26 +0200)
committerDavid Kastrup <dak@gnu.org>
Sun, 8 May 2016 14:28:28 +0000 (16:28 +0200)
It does not make sense for them to be instantiable.

lily/engraver.cc
lily/include/engraver.hh
lily/include/performer.hh
lily/include/scheme-engraver.hh
lily/include/translator.hh
lily/include/translator.icc
lily/translator.cc

index 25ae579bd7dbcd59f844b28c05b51d1db54e9d4a..5a1486927a3f696a9d503b99ab5dce2fb61ff2dd 100644 (file)
@@ -175,20 +175,3 @@ ly_is_grob_cause (SCM obj)
 {
   return unsmob<Grob> (obj) || unsmob<Stream_event> (obj) || scm_is_null (obj);
 }
-
-#include "translator.icc"
-
-ADD_TRANSLATOR (Engraver,
-                /* doc */
-                "Base class for engravers.  Does nothing, so it is not used.",
-
-                /* create */
-                "",
-
-                /* read */
-                "",
-
-                /* write */
-                ""
-               );
-
index 956f49365b6cc17d4e65c8734d4ec4227cb2bb3d..1f7e31ce40eecc3eb9afd0d0dd9e1509f3b75fac 100644 (file)
@@ -64,7 +64,8 @@ public:
   /**
      override other ctor
   */
-  TRANSLATOR_DECLARATIONS (Engraver);
+  DECLARE_CLASSNAME (Engraver);
+  Engraver ();
 };
 
 #define make_item(x, cause) internal_make_item (ly_symbol2scm (x), cause, x, __FILE__, __LINE__, __FUNCTION__)
index a640e240aa27449065dad6564fd6e7b524f955a0..70354fdbf2d845f9fe2a571339170b2c0681b43b 100644 (file)
@@ -30,7 +30,7 @@
 class Performer : public Translator
 {
 public:
-  VIRTUAL_COPY_CONSTRUCTOR (Translator, Performer);
+  DECLARE_CLASSNAME (Performer);
   friend class Performer_group;
   Performer_group *get_daddy_performer () const;
 
index 3cd691578fa5b4b2b83f1ac9ecf5b0007dd979de..286bcdd9952e0110a998eb6fd1644d0d9f741110 100644 (file)
@@ -48,6 +48,9 @@ protected:
 private:
   void acknowledge_grob_by_hash (Grob_info info, SCM iface_function_hash);
   void init_acknowledgers (SCM alist, SCM *hash);
+  // For now no description.  In future, something derived from the
+  // definition might make sense.
+  SCM translator_description () const { return SCM_EOL; }
 
   DECLARE_ACKNOWLEDGER (grob);
   DECLARE_END_ACKNOWLEDGER (grob);
index 118220772ab72b758ea467f67e616bbff6946230..5a93564d9a468cfb311067d7d312318e10817c26 100644 (file)
@@ -105,6 +105,7 @@ private:
 public:
   Context *context () const { return daddy_context_; }
 
+  Translator ();
   Translator (Translator const &);
 
   SCM internal_get_property (SCM symbol) const;
@@ -128,7 +129,13 @@ public:
   Context *get_score_context () const;
   Global_context *get_global_context () const;
 
-  TRANSLATOR_DECLARATIONS (Translator);
+  DECLARE_CLASSNAME (Translator);
+  virtual Translator *clone () const = 0;
+  virtual void fetch_precomputable_methods (Callback methods[]) = 0;
+  virtual SCM get_listener_list () const = 0;
+  virtual SCM translator_description () const = 0;
+  virtual Grob_info_callback get_acknowledger (SCM sym) = 0;
+  virtual Grob_info_callback get_end_acknowledger (SCM sym) = 0;
 
 protected:                      // should be private.
   Context *daddy_context_;
index 250a92313724f9ab1a7afb0778085dcb7f9eb73b..3b700d815c7d3181995866739f68f511a37d09ae 100644 (file)
@@ -77,7 +77,7 @@
   DEFINE_ACKNOWLEDGERS(classname)                                       \
 
 #define ADD_TRANSLATOR(classname, desc, grobs, read, write)             \
-  ADD_TRANSLATOR_FAMILY (classname)                                     \
+  ADD_TRANSLATOR_FAMILY (classname);                                    \
   ADD_THIS_TRANSLATOR (classname);                                      \
   DEFINE_TRANSLATOR_DOC(classname, desc, grobs, read, write)            \
   DEFINE_TRANSLATOR_LISTENER_LIST(classname)                            \
index 370f7771c0dcf2a95148ee964b97f4ccd00eb284..9c667a8a251344877adb77d72544fef5306b78b5 100644 (file)
@@ -318,16 +318,4 @@ internal_event_assignment (Stream_event **old_ev, Stream_event *new_ev, const ch
     }
 }
 
-ADD_TRANSLATOR (Translator,
-                /* doc */
-                "Base class.  Not instantiated.",
-
-                /* create */
-                "",
-
-                /* read */
-                "",
-
-                /* write */
-                ""
-               );
+// Base class.  Not instantiated.  No ADD_TRANSLATOR call.