{
// the new interval starts earlier; we need to adjust our current frame:
current_frame.m_lower_bound = new_frame.m_lower_bound;
+ current_frame.m_changed = true;
}
// NOTE no "else" part needed since in that case our current frame already
// contains the new one!
{
// yes, we need to move the start:
current_frame.m_lower_bound = new_frame.m_lower_bound;
+ current_frame.m_changed= true;
}
// now let's extend the end:
current_frame.m_upper_bound = new_frame.m_upper_bound;
+ current_frame.m_changed = true;
// well... let's walk through the following frames; looking for more joins...:
IntervalList::iterator it2 = it;
m_intervals.insert(it, Interval( current_frame.m_lower_bound, del_frame.m_lower_bound ) );
}
// adjust start of current frame:
- current_frame.m_lower_bound= del_frame.m_upper_bound;
+ if (current_frame.m_lower_bound < del_frame.m_upper_bound)
+ {
+ current_frame.m_lower_bound= del_frame.m_upper_bound;
+ current_frame.m_changed= true;
+ }
// and we are done!
return;
}
// a part of the current interval needs to be preserved..
// move the end.
current_frame.m_upper_bound= del_frame.m_lower_bound;
+ current_frame.m_changed= true;
// and continue with the next interval:
++it;
continue;
Interval()
: m_lower_bound(0)
, m_upper_bound(0)
+ , m_weak_mark(0)
+ , m_changed(false)
{
} //
- Interval( unsigned int start, unsigned int end )
+ Interval( unsigned int start, unsigned int end, int weak_mark= 0 )
: m_lower_bound(start)
, m_upper_bound(end)
+ , m_weak_mark(weak_mark)
+ , m_changed(false)
{
} //
unsigned int lower_bound() const { return m_lower_bound; }
unsigned int upper_bound() const { return m_upper_bound; }
+ int weak_mark() const { return m_weak_mark; }
+
+ bool changed() const { return m_changed; }
+
bool operator== (const Interval& other) const
{
unsigned int m_lower_bound;
unsigned int m_upper_bound;
+ int m_weak_mark;
+ bool m_changed;
+
}; // eo Interval
CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 100u, intervals.front().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( false, intervals.front().changed() );
} // eo AddIntervalsInclude()
CPPUNIT_ASSERT_EQUAL( 5u, intervals.front().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 120u, intervals.front().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
} // eo AddIntervalsEmbrace()
CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 120u, intervals.front().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
} // eo AddIntervalsJoin1()
CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 120u, intervals.front().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
} // eo AddIntervalsJoin1b()
CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 250u, intervals.front().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
} // eo AddIntervalsJoin2()
CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 100u, intervals.front().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( false, intervals.front().changed() );
} // eo SubIntervalsDisjoint()
CPPUNIT_ASSERT_EQUAL( 40u, intervals.back().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 100u, intervals.back().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( false, intervals.front().changed() );
+ CPPUNIT_ASSERT_EQUAL( true, intervals.back().changed() );
} // eo SubIntervalsSplit1()
CPPUNIT_ASSERT_EQUAL( 20u, intervals.front().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 100u, intervals.front().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
} // eo SubIntervalsCutFront()
CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 87u, intervals.front().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
} // eo SubIntervalsCutBack()
CPPUNIT_ASSERT_EQUAL( 220u, intervals.front().lower_bound() );
CPPUNIT_ASSERT_EQUAL( 300u, intervals.front().upper_bound() );
+ CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
} // eo SubIntervalsCutMore()