void merge(int min,
int max) {
// Loop through ranges
for (int i = 0; i < num; i++)
{
// Min-max is subsumed by minRange[i]-maxRange[i]
if (min >= minRange[i] && max < = maxRange[i])
{
return;
}
// Min-max subsumes minRange[i]-maxRange[i]
else if (min < = minRange[i] && max >= maxRange[i])
{
delete(i);
merge(min, max);
return;
}
// Min is in the range, but max is outside
else if (min >= minRange[i] && min < = maxRange[i])
{
min = minRange[i];
delete(i);
merge(min, max);
return;
}
// Max is in the range, but min is outside
else if (max >= minRange[i] && max < = maxRange[i])
{
max = maxRange[i];
delete(i);
merge(min, max);
return;
}
}
// Must not overlap any other ranges
if (num >= size)
{
size *= 2;
int[] newMin = new int[size];
int[] newMax = new int[size];
System.arraycopy(minRange, 0, newMin, 0, num);
System.arraycopy(maxRange, 0, newMax, 0, num);
minRange = newMin;
maxRange = newMax;
}
minRange[num] = min;
maxRange[num] = max;
num++;
}
Merges a range into the range list, coalescing ranges if possible. |