00001
00002
00003
00005 #ifndef SEQLOC_H
00006 #define SEQLOC_H
00007
00008 #include <string>
00009 #include <iostream>
00010 #include <dsu.h>
00011 #include "DnaStr.h"
00012
00025 class SeqLoc {
00026 friend std::ostream& operator<<(std::ostream&,const SeqLoc&);
00027 inline friend bool operator<(const SeqLoc&, const SeqLoc&);
00028 public:
00040 SeqLoc(dsu::Strand_t, int, int);
00041
00045 SeqLoc(const SeqLoc&);
00046
00050 virtual ~SeqLoc() { }
00051
00055 inline dsu::Strand_t getStrnd() const;
00056
00060 inline int getEnd5() const;
00061
00065 inline int getEnd3() const;
00066
00074 bool inRange(int) const;
00075
00079 unsigned length() const;
00080
00084 bool isEnd5Set() const;
00085
00089 bool isEnd3Set() const;
00090
00096 bool operator==(const SeqLoc& sl) const {
00097 return _strnd == sl._strnd && _end5 == sl._end5 && sl._end3 == _end3;
00098 }
00099
00103 virtual const string& getTypeStr() const;
00104
00110 virtual void print(std::ostream&,const string& = "") const;
00111
00115 virtual int getClosestEnd5(int) const { return getEnd5(); }
00116
00120 virtual int getClosestEnd3(int,int) const { return getEnd3(); }
00121
00127 virtual bool isActualOverlap(int,int) const { return true; }
00128
00132 void setEnd5(int);
00133
00137 void setEnd3(int);
00138
00142 void setStrnd(dsu::Strand_t strnd) { _strnd = strnd; }
00143
00144 friend bool isOverlap(const SeqLoc&, const SeqLoc&);
00145
00146 private:
00147 dsu::Strand_t _strnd;
00148 int _end5, _end3;
00149 };
00150
00151 #include "inline/SeqLoc.hpp"
00152
00153 #endif //SEQLOC_H