]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/identifier.hh
patch::: 0.0.73pre.jcn1: epsilon performance
[lilypond.git] / lily / include / identifier.hh
1 /*
2   identifier.hh -- part of GNU LilyPond
3
4   (c) 1996,97 Han-Wen Nienhuys
5 */
6
7 #ifndef IDENTIFIER_HH
8 #define IDENTIFIER_HH
9
10 #include "lily-proto.hh"
11 #include "string.hh"
12 #include "input.hh"
13 #include "virtual-methods.hh"
14
15 /* boolean argument to accesor is copy_b..*/
16 #define IDACCESSOR( Input_staff, staff)\
17     virtual Input_staff * staff(bool) { error(#Input_staff); return 0; }
18
19
20 struct Identifier : public Input {
21     void *data;
22     String name_str_;
23     bool init_b_;
24     bool accessed_b_;
25     int token_code_i_;
26     
27     Identifier(String n, int code) ;
28     virtual ~Identifier() ;
29
30     void print()const;
31     NAME_MEMBERS();
32     void error(String);
33     IDACCESSOR(Music, music)
34     IDACCESSOR(Input_engraver, igravs)  
35     IDACCESSOR(Input_performer, iperfs) 
36     IDACCESSOR(General_script_def, script)
37     IDACCESSOR(Symtables, symtables)
38     IDACCESSOR(Midi_def, mididef)
39     IDACCESSOR(Paper_def, paperdef)
40     IDACCESSOR(Lookup,lookup)
41     IDACCESSOR(Real,real)
42     IDACCESSOR(Request, request)
43     IDACCESSOR(Score, score)
44     IDACCESSOR(int, intid)
45
46 protected:
47     virtual void do_print()const=0;
48 private:
49     Identifier(Identifier const&);
50 };
51
52 #define declare_id_class(Idclass, Class, accessor)      \
53 struct Idclass : Identifier {\
54         NAME_MEMBERS();                             \
55         Idclass(String s, Class*st, int code);\
56         virtual Class* accessor(bool copy);\
57         ~Idclass();\
58         virtual void do_print()const; \
59 }\
60
61
62
63 declare_id_class(Real_id, Real, real);
64 declare_id_class(Script_id, General_script_def, script);
65 declare_id_class(Lookup_id, Lookup, lookup);
66 declare_id_class(Symtables_id, Symtables, symtables);
67 declare_id_class(Music_id, Music, music);
68 declare_id_class(Int_id, int, intid);
69 declare_id_class(Score_id, Score, score);
70 declare_id_class(Request_id, Request, request);
71 declare_id_class(Input_gravs_id, Input_engraver, igravs);
72 declare_id_class(Input_perfs_id, Input_performer, iperfs);
73 declare_id_class(Midi_def_id,Midi_def, mididef);
74 declare_id_class(Paper_def_id,Paper_def, paperdef);
75 #endif // IDENTIFIER_