10 #ifndef smtk_common_RangeDetector_h
11 #define smtk_common_RangeDetector_h
28 typename std::map<I, I>::iterator it = m_collapse.find(val);
29 if (it != m_collapse.end())
31 I collapseTarget = it->second;
32 m_ranges[collapseTarget]++;
33 m_collapse.erase(it->first);
34 typename std::map<I, I>::iterator rit = m_ranges.find(val + 1);
35 if (rit != m_ranges.end())
37 m_ranges[collapseTarget] = rit->second;
39 m_collapse[rit->second + 1] = collapseTarget;
44 m_collapse[val + 1] = collapseTarget;
49 it = m_ranges.find(val + 1);
50 if (it != m_ranges.end())
52 m_ranges[val] = it->second;
53 m_collapse[it->second + 1] = val;
59 m_collapse[val + 1] = val;
65 std::map<I, I>&
ranges()
const {
return m_ranges; }
66 std::map<I, I>&
ranges() {
return m_ranges; }
72 typename std::map<I, I>::const_iterator it;
73 for (it = m_ranges.begin(); it != m_ranges.end(); ++it)
75 nn += it->second - it->first + 1;
90 std::cout <<
"Ranges:\n";
91 typename std::map<I, I>::iterator it;
92 for (it = m_ranges.begin(); it != m_ranges.end(); ++it)
94 std::cout <<
" " << it->first <<
" .. " << it->second <<
"\n";
96 std::cout <<
"Collapsers:\n";
97 for (it = m_collapse.begin(); it != m_collapse.end(); ++it)
99 std::cout <<
" " << it->first <<
" .. " << it->second <<
"\n";
105 std::map<I, I> m_collapse;
106 std::map<I, I> m_ranges;
112 #endif // smtk_common_RangeDetector_h