#ifndef IDENTIFIER_HH
#define IDENTIFIER_HH
-#include "proto.hh"
-#include "string.hh"
+#include "identparent.hh"
+#include "symtable.hh"
+#include "inputstaff.hh"
+#include "inputmusic.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 {\
+ Idclass(String s, Class*st):Identifier(s) { data = st; }\
+ virtual Class* accessor(bool copy=false) {\
+ if (copy)\
+ return new Class(* (Class*) data);\
+ else\
+ return (Class*) data;\
+ }\
+ ~Idclass() { delete accessor(); }\
+}\
-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(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);
-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