]> git.donarmstrong.com Git - lilypond.git/blob - lily/music-constructor.cc
* ps/music-drawing-routines.ps: remove draw_beam.
[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 #include "music-constructor.hh"
10
11 #include <map>                  // UGH.
12 #include <cassert>
13
14 #include "warn.hh"
15
16 static std::map<String, Music_ctor> *ctors_map_;
17
18 void
19 add_music_ctor (String s, Music_ctor c)
20 {
21   if (!ctors_map_)
22     ctors_map_ = new std::map<String, Music_ctor>;
23
24   (*ctors_map_)[s] = c;
25 }
26
27 Music_ctor
28 get_music_ctor (String s)
29 {
30   if (ctors_map_->find (s) == ctors_map_->end ())
31     return 0;
32
33   return (*ctors_map_)[s];
34 }
35
36 Music *
37 make_music (String s, SCM init)
38 {
39   Music_ctor c = get_music_ctor (s);
40   if (!c)
41     programming_error (String ("No constructor for music: ") + s);
42   assert (c);
43
44   return (*c) (init);
45 }
46