]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/identifier.hh
release: 0.0.43
[lilypond.git] / lily / include / identifier.hh
1 /*
2   identifier.hh -- part of LilyPond
3
4   (c) 1996,97 Han-Wen Nienhuys
5 */
6
7 #ifndef IDENTIFIER_HH
8 #define IDENTIFIER_HH
9
10 #include "proto.hh"
11 #include "string.hh"
12
13 /* boolean argument to accesor is copy_b..*/
14 #define IDACCESSOR( Input_staff, staff)\
15     virtual Input_staff * staff(bool) { error(#Input_staff); return 0; }
16
17
18 struct Identifier {
19     void *data;
20     String name;
21     bool init_b_;
22     bool accessed_b_;
23     int token_code_i_;
24     char const *defined_ch_C_;
25     
26     Identifier(String n, int code) ;
27     virtual ~Identifier() {}
28
29     void print()const;
30     virtual char const *classname() const{ return "new Identifier"; }
31     void error(String);
32     IDACCESSOR(Input_staff, staff)
33     IDACCESSOR(Input_music, music)
34     IDACCESSOR(Music_voice, mvoice)
35     IDACCESSOR(Script_def, script)
36     IDACCESSOR(Symtables, symtables)
37     IDACCESSOR(Music_general_chord, mchord)
38     IDACCESSOR(Lookup,lookup)
39     IDACCESSOR(Real,real)
40     IDACCESSOR(Request, request)
41     IDACCESSOR(Input_score, score)
42
43 protected:
44     virtual void do_print()const=0;
45 private:
46     Identifier(Identifier const&){}
47 };
48
49 #define declare_id_class(Idclass, Class, accessor)      \
50 struct Idclass : Identifier {\
51         virtual char const *classname()const;\
52         Idclass(String s, Class*st, int code);\
53         virtual Class* accessor(bool copy);\
54         ~Idclass();\
55         virtual void do_print()const; \
56 }\
57
58
59
60 declare_id_class(Real_id, Real, real);
61 declare_id_class(Script_id, Script_def, script);
62 declare_id_class(Lookup_id, Lookup, lookup);
63 declare_id_class(Symtables_id, Symtables, symtables);
64 declare_id_class(Staff_id, Input_staff, staff);
65 declare_id_class(M_chord_id, Music_general_chord, mchord);
66 declare_id_class(M_voice_id, Music_voice, mvoice);
67 declare_id_class(Score_id, Input_score, score);
68 declare_id_class(Request_id, Request, request);
69
70 #endif // IDENTIFIER_