*** empty log message ***
[lilypond.git] / lily / music-constructor.cc
blob0c39a96a73dc2a6030008bdf40190a03f580682a
1 /*
2 music-constructor.cc -- implement Music_constructor
4 source file of the GNU LilyPond music typesetter
6 (c) 2001--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
8 */
10 #include <map> // UGH.
11 #include "warn.hh"
12 #include "music-constructor.hh"
13 typedef Music* (*Music_ctor) ();
15 static std::map<String,Music_ctor> *ctors_map_;
17 void
18 add_music_ctor (String s, Music_ctor c)
20 if (!ctors_map_)
21 ctors_map_ = new std::map<String, Music_ctor>;
23 (*ctors_map_)[s] = c;
27 Music_ctor
28 get_music_ctor (String s)
30 if (ctors_map_->find (s) == ctors_map_->end ())
31 return 0;
33 return (* ctors_map_)[s];
36 Music*
37 make_music (String s)
39 Music_ctor c = get_music_ctor (s);
40 if (!c)
41 programming_error (String ("No constructor for music: ") + s);
42 assert (c);
44 return (*c) ();