package utils;
import java.util.ArrayList;
import org.apache.commons.lang.math.IntRange;
import org.apache.log4j.Logger;
public class RangeUtils {
private static final Logger logger = Logger.getLogger(RangeUtils.class);
public static ArrayList<IntRange> sortIntRangeList(ArrayList<IntRange> inlist){
for(int counter=0; counter < inlist.size() -1; counter++) { //Loop once for each element in the array.
for(int index=0; index < inlist.size() -1 -counter; index++) { //Once for each element, minus the counter.
if(inlist.get(index).getMinimumInteger() > inlist.get(index + 1).getMinimumInteger()) { //Test if need a swap or not.
IntRange temp = inlist.get(index); //These three lines just swap the two elements:
inlist.set(index, inlist.get(index + 1));
inlist.set(index+1, temp);
}
}
}
return inlist;
}
public static final ArrayList<IntRange> boolArrayToListOfTrueIntRanges(boolean[] array) {
ArrayList<IntRange> allRanges = new ArrayList<IntRange>();
if(array == null || array.length == 0){
return allRanges;
}
boolean lastVal = false;
int startRangePos = 0;
for(int n = 0; n < array.length; n++){
boolean thisVal = array[n];
// this pos is start of a range
if(thisVal== true && lastVal == false){
startRangePos = n;
}
// last pos was end of a range
if(thisVal == false && lastVal == true){
allRanges.add(new IntRange(startRangePos, n - 1)); // minus one because we are at next pos already
}
// if it is the last one and true then it is the last range
if(n == array.length - 1 && thisVal == true){
allRanges.add(new IntRange(startRangePos, array.length - 1));
}
lastVal = thisVal;
}
logger.info("allRanges.size()" + allRanges.size());
return allRanges;
}
public static final ArrayList<IntRange> boolArrayToListOfFalseIntRanges(boolean[] array) {
ArrayList<IntRange> allRanges = new ArrayList<IntRange>();
if(array == null || array.length == 0){
return allRanges;
}
boolean lastVal = true;
int startRange = 0;
for(int n = 0; n < array.length; n++){
boolean thisVal = array[n];
if(thisVal != lastVal){
// this was different and false so start new range
if(thisVal == false){
startRange = n;
}
// this was different and last was false so add range
else{
allRanges.add(new IntRange(startRange, n - 1));
}
}
// if it is the last one and false
if(n == array.length - 1 && thisVal == false){
allRanges.add(new IntRange(startRange, n - 1));
}
lastVal = thisVal;
}
logger.info("allRanges.size()" + allRanges.size());
return allRanges;
}
}