]> git.donarmstrong.com Git - lilypond.git/blob - lily/music-constructor.cc
* scm/music-functions.scm (has-request-chord): don't use
[lilypond.git] / lily / music-constructor.cc
1 /*   
2   music-constructor.cc --  implement Music_constructor
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2001--2005  Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include "music-constructor.hh"
11
12 #include <map>                  // UGH.
13 #include <cassert>
14
15 #include "warn.hh"
16
17 static std::map<String, Music_ctor> *ctors_map_;
18
19 void
20 add_music_ctor (String s, Music_ctor c)
21 {
22   if (!ctors_map_)
23     ctors_map_ = new std::map<String, Music_ctor>;
24   
25  (*ctors_map_)[s] = c;
26 }
27
28 Music_ctor
29 get_music_ctor (String s)
30 {
31   if (ctors_map_->find (s) == ctors_map_->end ())
32     return 0;
33
34   return (*ctors_map_)[s];
35 }
36
37 Music * 
38 make_music (String s, SCM init)
39 {
40   Music_ctor c = get_music_ctor (s);
41   if (!c)
42     programming_error (String ("No constructor for music: ") + s);
43   assert (c);
44   
45   return (*c) (init);
46 }
47