]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/translator.cc
Doc-es: various updates.
[lilypond.git] / lily / translator.cc
index a277eab16d96f86ffc7e7c2e2188a434f812357c..e57e1c391af53eec7dc93253da33fe28d5cff8e7 100644 (file)
 
 #include "translator.icc"
 
-using std::string;
-using std::vector;
-
 Translator::~Translator ()
 {
 }
 
-void
-Translator::init ()
-{
-  daddy_context_ = 0;
-  smobify_self ();
-}
-
 void
 Translator::process_music ()
 {
@@ -52,15 +42,10 @@ Translator::process_acknowledged ()
 {
 }
 
-Translator::Translator ()
-{
-  init ();
-}
-
-Translator::Translator (Translator const &)
-  : Smob<Translator> ()
+Translator::Translator (Context *c)
+  : daddy_context_ (c)
 {
-  init ();
+  smobify_self ();
 }
 
 Moment
@@ -163,7 +148,7 @@ Translator::static_translator_description (const char *grobs,
                                            const char *desc,
                                            SCM listener_list,
                                            const char *read,
-                                           const char *write) const
+                                           const char *write)
 {
   SCM static_properties = SCM_EOL;
 
@@ -210,7 +195,7 @@ Translator::get_score_context () const
   return daddy_context_->get_score_context ();
 }
 
-const char Translator::type_p_name_[] = "ly:translator?";
+const char * const Translator::type_p_name_ = "ly:translator?";
 
 bool
 Translator::must_be_last () const
@@ -233,34 +218,29 @@ Translator::print_smob (SCM port, scm_print_state *) const
 }
 
 void
-add_acknowledger (Translator::Grob_info_callback ptr,
+add_acknowledger (SCM ptr,
                   char const *func_name,
-                  vector<Acknowledge_information> *ack_array)
+                  SCM &ack_hash)
 {
-  Acknowledge_information inf;
-  inf.function_ = ptr;
+  if (SCM_UNBNDP (ack_hash))
+    ack_hash = Scheme_hash_table::make_smob ();
 
   string interface_name (func_name);
 
   interface_name = replace_all (&interface_name, '_', '-');
   interface_name += "-interface";
 
-  /*
-    this is only called during program init, so safe to use scm_gc_protect_object ()
-  */
-  inf.symbol_ = scm_gc_protect_object (ly_symbol2scm (interface_name.c_str ()));
-  ack_array->push_back (inf);
+  unsmob<Scheme_hash_table> (ack_hash)
+    ->set (ly_symbol2scm (interface_name.c_str ()), ptr);
 }
 
-Translator::Grob_info_callback
-generic_get_acknowledger (SCM sym, vector<Acknowledge_information> const *ack_array)
+SCM
+generic_get_acknowledger (SCM sym, SCM ack_hash)
 {
-  for (vsize i = 0; i < ack_array->size (); i++)
-    {
-      if (ack_array->at (i).symbol_ == sym)
-        return ack_array->at (i).function_;
-    }
-  return 0;
+  if (SCM_UNBNDP (ack_hash))
+    return SCM_UNDEFINED;
+
+  return unsmob<Scheme_hash_table> (ack_hash)->get (sym);
 }
 
 Moment
@@ -321,16 +301,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.