lilypond-0.1.37
[lilypond.git] / lily / symtable.cc
blobd247fa649473b75a63dc8c69d8a9762369ea8b21
1 /*
2 symtable.cc -- implement Symbol_table
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
9 #include "misc.hh"
10 #include "dimen.hh"
11 #include "debug.hh"
12 #include "real.hh"
13 #include "atom.hh"
14 #include "assoc.hh"
15 #include "assoc-iter.hh"
16 #include "symtable.hh"
18 Symtables::Symtables()
22 Symtables::Symtables (Symtables const &s)
24 for (Assoc_iter<String, Symtable*> i (s); i.ok(); i++)
26 add (i.key(), new Symtable (*i.val ()));
30 Symtables::~Symtables()
32 for (Assoc_iter<String, Symtable*> i (*this); i.ok(); i++)
34 delete i.val();
38 Atom
39 Symtable::lookup (String s) const
41 if (elt_b (s))
42 return (*this)[s];
43 else
45 warning ("Symtable `" + id_str+ _("\': unknown symbol `") +s+"'\n");
46 Atom sy;
47 return sy;
51 Symtable*
52 Symtables::operator()(String s)
54 if (!elt_b (s))
56 error ("Symtable `" + s + _("\' unknown"));
57 /*
58 We can't return, because we'll dump core anyway.
60 return 0;
62 else
63 return Dictionary<Symtable*>::operator[](s);
65 void
66 Symtables::print() const
68 for (Assoc_iter<String, Symtable*> i (*this); i.ok(); i++)
70 DOUT << "table \'" << i.key() << "\' {\n";
71 i.val()->print ();
72 DOUT << "}\n";
75 void
76 Symtable::print() const
78 for (Assoc_iter<String, Atom> i (*this); i.ok(); i++)
80 DOUT << "\'" << i.key() << "\'->" << i.val ().str () << "\n";
84 void
85 Symtables::add (String s, Symtable*p)
87 p-> id_str = s;
88 Dictionary<Symtable*>::add (s,p);