]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/music-constructor.cc
* lily/align-interface.cc (align_elements_to_extents): warn if
[lilypond.git] / lily / music-constructor.cc
index bd14326605244fe83fa218f1a771b58e4c709605..481b9ebc9026d899109988d1e2fd3d4ba82d7cc6 100644 (file)
@@ -1,27 +1,28 @@
-/*   
-  music-constructor.cc --  implement Music_constructor
-  
+/*
+  music-constructor.cc -- implement Music_constructor
+
   source file of the GNU LilyPond music typesetter
-  
-  (c) 2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
 
-#include <map>                 // UGH.
+  (c) 2001--2005  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
 #include "music-constructor.hh"
-typedef Music* (*Music_ctor) ();
 
-static map<String,Music_ctor> *ctors_map_;
+#include <map>                 // UGH.
+#include <cassert>
+
+#include "warn.hh"
+
+static std::map<String, Music_ctor> *ctors_map_;
 
 void
-add_music_ctor (String s,  Music_ctor c)
+add_music_ctor (String s, Music_ctor c)
 {
   if (!ctors_map_)
-    ctors_map_ = new map<String, Music_ctor>;
-  
- (*ctors_map_)[s] = c;
-}
+    ctors_map_ = new std::map<String, Music_ctor>;
 
+  (*ctors_map_)[s] = c;
+}
 
 Music_ctor
 get_music_ctor (String s)
@@ -29,12 +30,17 @@ get_music_ctor (String s)
   if (ctors_map_->find (s) == ctors_map_->end ())
     return 0;
 
-  return (* ctors_map_)[s];
+  return (*ctors_map_)[s];
 }
 
-Music
-get_music (String s)
+Music *
+make_music (String s, SCM init)
 {
-  return (*get_music_ctor (s)) ();
+  Music_ctor c = get_music_ctor (s);
+  if (!c)
+    programming_error (String ("No constructor for music: ") + s);
+  assert (c);
+
+  return (*c) (init);
 }