00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 #ifndef Anchor_h
00010 #define Anchor_h
00011 
00012 #include "AGTypes.h"
00013 #include "Signal.h"
00014 
00015 
00016 using namespace std;
00017 
00026 class Anchor {
00027   friend class AG;
00028   friend class AnnotationIndex;
00029 
00030  private:
00032   const Id id;
00033 
00035   Offset offset;
00036 
00038   Unit unit;
00039 
00041   string signals;
00042 
00044   bool anchored;
00045 
00046  protected:
00047 
00049   void unsetOffset() { anchored = false; }
00050 
00051  public:
00053   Anchor(Id id, Offset offset, Unit unit, string signals);
00054 
00056   Anchor(Id id, Unit unit, string signals);
00057 
00059   Anchor(Id id, const Anchor*);
00060 
00062   const Id getId() const {return id;}
00063 
00065   Offset getOffset() const { return offset; }
00066 
00068   void setOffset(Offset o) {offset = o; anchored = true;}
00069 
00071   bool getAnchored() const { return anchored; }
00072 
00074   void setSignals(string signals) { this->signals = signals; }
00075 
00077   string getSignals() const { return signals; }
00078 
00080   void setUnit(string unit) { this->unit = unit; }
00081   
00083   Unit getUnit() const { return unit; }
00084 
00086   string toString();
00088   friend bool operator < (const Anchor&, const Anchor&);
00089 };
00090 
00096 class AnchorCompFunc {
00097  public:
00098   bool operator() (const Anchor* a1, const Anchor* a2) const {
00099     return *a1 < *a2;
00100   }
00101 };
00102 
00107 typedef set<Anchor*,AnchorCompFunc> AnchorSeq;
00109 typedef set<Anchor*> AnchorSet;
00110 
00111 #endif