00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef Identifiers_h
00011 #define Identifiers_h
00012
00013 #include <cstdio>
00014 #include <string>
00015 #include <set>
00016
00017 #include "AGTypes.h"
00018 #include "AGException.h"
00019 #include "Hash.h"
00020
00021 class AGSet;
00022 class AG;
00023 class Timeline;
00024 class Signal;
00025 class Annotation;
00026 class Anchor;
00027
00028 using namespace std;
00029
00030 typedef string String;
00031 typedef hash_set<Id,hashString,StringEqual> IdSet;
00032 typedef hash_map<AGSetId,AGSet*,hashString,StringEqual > AGSetRefs;
00033 typedef hash_map<AGId,AG*,hashString,StringEqual > AGRefs;
00034 typedef hash_map<TimelineId,Timeline*,hashString,StringEqual > TimelineRefs;
00035 typedef hash_map<SignalId,Signal*,hashString,StringEqual > SignalRefs;
00036 typedef hash_map<AnnotationId,Annotation*,hashString,StringEqual > AnnotationRefs;
00037 typedef hash_map<AnchorId,Anchor*,hashString,StringEqual > AnchorRefs;
00038
00047 class Identifiers {
00048 private:
00050 const Id nameSpace;
00051
00053 const string type;
00054
00056 long cur;
00057
00059 IdSet issued;
00060
00062 static AGSetRefs agSetRefs;
00064 static AGRefs agRefs;
00066 static TimelineRefs timelineRefs;
00068 static SignalRefs signalRefs;
00070 static AnnotationRefs annotationRefs;
00072 static AnchorRefs anchorRefs;
00073
00074 public:
00076 Identifiers(const Id& nameSpace, string type);
00077
00079 const Id new_id();
00080
00089 const Id new_id(const Id& id) throw (AGException);
00090
00092 bool existsId(const Id& id);
00093
00095 void reclaim_id(const Id& id);
00096
00102 static Id getNamespace(const Id& id);
00103
00105 static AGSet* getAGSetRef(const AGSetId& id);
00107 static AG* getAGRef(const AGId& id);
00109 static Timeline* getTimelineRef(const TimelineId& id);
00111 static Signal* getSignalRef(const SignalId& id);
00113 static Annotation* getAnnotationRef(const AnnotationId& id);
00115 static Anchor* getAnchorRef(const AnchorId& id);
00116
00118 static void deleteAGSetRef(const AGSetId& id);
00120 static void deleteAGRef(const AGId& id);
00122 static void deleteTimelineRef(const TimelineId& id);
00124 static void deleteSignalRef(const SignalId& id);
00126 static void deleteAnnotationRef(const AnnotationId& id);
00128 static void deleteAnchorRef(const AnchorId& id);
00129
00131 static void addAGSetRef(const AGSetId& id, AGSet* ref);
00133 static void addAGRef(const AGId& id, AG* ref);
00135 static void addTimelineRef(const TimelineId& id, Timeline* ref);
00137 static void addSignalRef(const SignalId& id, Signal* ref);
00139 static void addAnnotationRef(const AnnotationId& id, Annotation* ref);
00141 static void addAnchorRef(const AnchorId& id, Anchor* ref);
00142
00144 static bool existsAGSet(const AGSetId& id);
00146 static bool existsAG(const AGId& id);
00148 static bool existsTimeline(const TimelineId& id);
00150 static bool existsSignal(const SignalId& id);
00152 static bool existsAnnotation(const AnnotationId& id);
00154 static bool existsAnchor(const AnchorId& id);
00155
00156 };
00157
00158 #endif