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