/*
identifier.hh -- part of LilyPond
- (c) 1996 Han-Wen Nienhuys
+ (c) 1996,97 Han-Wen Nienhuys
*/
#ifndef IDENTIFIER_HH
#define IDENTIFIER_HH
-#include "proto.hh"
-#include "string.hh"
+#include "identparent.hh"
+#include "symtable.hh"
+#include "input-staff.hh"
+#include "input-music.hh"
+#include "notename.hh"
+#include "lookup.hh"
+#include "script-def.hh"
-struct Identifier
-{
- void *data;
- String name;
-
- Identifier(String n) ;
- virtual ~Identifier();
- virtual Staff * staff() { assert(false); }
- virtual Voice_list * voices() { assert(false); }
-};
+#define make_id_class(Idclass, Class, accessor) \
+struct Idclass : Identifier {\
+ virtual const char *classname() { return #Class; }\
+ Idclass(String s, Class*st):Identifier(s) { data = st; }\
+ virtual Class* accessor(bool copy) {\
+ if (copy)\
+ return new Class(* (Class*) data);\
+ else\
+ return (Class*) data;\
+ }\
+ ~Idclass() { delete accessor(false); }\
+ virtual void do_print()const; \
+}\
-struct Staff_id : Identifier {
- Staff_id(String s, Staff*st):Identifier(s) { data = st; }
- virtual Staff* staff() { return (Staff*) data; }
- ~Staff_id();
-};
+make_id_class(Real_id, Real, real);
+make_id_class(Script_id, Script_def, script);
+make_id_class(Lookup_id, Lookup, lookup);
+make_id_class(Symtables_id, Symtables, symtables);
+make_id_class(Staff_id, Input_staff, staff);
+make_id_class(M_chord_id, Music_general_chord, mchord);
+make_id_class(M_voice_id, Music_voice, mvoice);
+make_id_class(Notetab_id, Notename_tab, notename_tab);
-struct Voices_id : Identifier {
- Voices_id(String s, Voice_list*st):Identifier(s) { data = st; }
- virtual Voice_list * voices() { return (Voice_list*)data; }
- ~Voices_id();
-};
#endif // IDENTIFIER_HH