20 #include "NonOverlapRegions.h"
23 NonOverlapRegions::NonOverlapRegions()
29 NonOverlapRegions::~NonOverlapRegions()
38 myRegions[chrom].add(start, end);
47 return(myRegions[chrom].
inRegion(pos));
51 NonOverlapRegionPos::NonOverlapRegionPos()
54 myRegionIter = myRegions.begin();
55 myTmpIter = myRegions.begin();
62 myRegionIter = myRegions.begin();
63 myTmpIter = myRegions.begin();
67 NonOverlapRegionPos::~NonOverlapRegionPos()
69 myRegionIter = myRegions.begin();
70 myTmpIter = myRegions.begin();
80 std::cerr <<
"NonOverlapRegionPos::add: Invalid Range, "
81 <<
"start must be < end, but " << start <<
" >= " << end
91 if(end > myRegionIter->second)
93 myRegionIter->second = end;
100 if(myRegionIter != myRegions.end())
104 if(end >= myRegionIter->first)
107 myRegionIter->first = start;
109 if(myRegionIter->second < end)
111 myRegionIter->second = end;
124 myTmpIter = myRegionIter;
126 while(myTmpIter != myRegions.end())
129 if(myTmpIter->first <= end)
131 if(myTmpIter->second > myRegionIter->second)
134 myRegionIter->second = myTmpIter->second;
137 myTmpIter = myRegions.erase(myTmpIter);
149 myRegionIter = myRegions.insert(myRegionIter,
150 std::make_pair(start, end));
165 if(myRegionIter == myRegions.end())
168 return(findLeft(pos));
170 else if(pos < myRegionIter->first)
174 return(findLeft(pos));
178 return(findRight(pos));
183 bool NonOverlapRegionPos::findRight(int32_t pos)
186 while(myRegionIter != myRegions.end())
189 if(pos < myRegionIter->first)
196 else if(pos < myRegionIter->second)
213 bool NonOverlapRegionPos::findLeft(int32_t pos)
215 if(myRegionIter == myRegions.end())
217 if(myRegionIter == myRegions.begin())
226 while(myRegionIter->first > pos)
230 if(myRegionIter == myRegions.begin())
244 if(pos < myRegionIter->second)
This class contains a list of non-overlapping regions, just positions, not including chromosomes (see...
void add(int32_t start, int32_t end)
End position is not included in the region.
bool inRegion(int32_t pos)
Return whether or not the position was found within a region.
bool inRegion(const char *chrom, int32_t pos)
Return whether or not the position was found within a region.
void add(const char *chrom, int32_t start, int32_t end)
End position is not included in the region.