00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CGATOOLS_UTIL_RANGE_SET_HPP_
00016 #define CGATOOLS_UTIL_RANGE_SET_HPP_ 1
00017
00020
00021 #include "cgatools/core.hpp"
00022 #include <vector>
00023 #include <string>
00024 #include <set>
00025
00026 namespace cgatools { namespace reference {
00027 class Range;
00028 class Location;
00029 class CrrFile;
00030 }}
00031
00032 namespace cgatools { namespace util {
00033
00034 typedef std::vector<std::string> StringVector;
00035
00040 class FastRangeSet
00041 {
00042 public:
00043 typedef std::pair<uint32_t,uint32_t> Range;
00044
00045 class RangeSet : public std::set<Range> {
00046 public:
00047 bool intersects(const Range& r) const;
00048 bool intersects(const reference::Range& r) const;
00049 bool contains(uint32_t pos) const;
00050 };
00051
00052 typedef std::vector<RangeSet> ChromosomeRanges;
00053
00054 FastRangeSet(const reference::CrrFile &ref);
00060 bool intersects (const reference::Range& inRange) const;
00061
00063 bool contains(const reference::Location& loc) const;
00064
00065 void add(const reference::Range& r);
00066
00068 void add(const std::string &rangeStr);
00069 void add(const StringVector &rangeStrSet);
00070
00072
00073 void addWholeReference(size_t extendRangeLength=0);
00074
00075 const ChromosomeRanges& getRanges() const {return ranges_;}
00076
00077 void clear();
00078 bool empty() const;
00079
00080 void regressionTest();
00081 protected:
00082 const reference::CrrFile& reference_;
00083 ChromosomeRanges ranges_;
00084 };
00085
00086 } }
00087
00088 #endif // CGATOOLS_UTIL_STREAMS_HPP_