mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-05 08:48:03 +00:00
RangeSet bugfixes.
This commit is contained in:
@@ -159,15 +159,10 @@ void RangeSet::clearValue (uint32 v)
|
|||||||
if (it->second == v)
|
if (it->second == v)
|
||||||
{
|
{
|
||||||
mRanges.erase (it);
|
mRanges.erase (it);
|
||||||
|
|
||||||
checkInternalConsistency ();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mRanges[v + 1] = it->second;
|
++ (it->first);
|
||||||
it->second = v - 1;
|
|
||||||
|
|
||||||
checkInternalConsistency ();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (it->second == v)
|
else if (it->second == v)
|
||||||
@@ -179,10 +174,9 @@ void RangeSet::clearValue (uint32 v)
|
|||||||
uint32 oldEnd = it->second;
|
uint32 oldEnd = it->second;
|
||||||
it->second = v - 1;
|
it->second = v - 1;
|
||||||
mRanges[v + 1] = oldEnd;
|
mRanges[v + 1] = oldEnd;
|
||||||
|
|
||||||
checkInternalConsistency ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkInternalConsistency();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -213,22 +207,21 @@ void RangeSet::simplify ()
|
|||||||
{
|
{
|
||||||
iterator it = mRanges.begin ();
|
iterator it = mRanges.begin ();
|
||||||
|
|
||||||
checkInternalConsistency ();
|
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
iterator nit = it;
|
iterator nit = it;
|
||||||
|
|
||||||
if (++nit == mRanges.end ())
|
if (++nit == mRanges.end ())
|
||||||
|
{
|
||||||
|
checkInternalConsistency();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (it->second >= (nit->first - 1))
|
if (it->second >= (nit->first - 1))
|
||||||
{
|
{
|
||||||
// ranges overlap
|
// ranges overlap
|
||||||
it->second = nit->second;
|
it->second = nit->second;
|
||||||
mRanges.erase (nit);
|
mRanges.erase (nit);
|
||||||
|
|
||||||
checkInternalConsistency ();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user