package hudson.model.queue;
import hudson.model.Queue.BuildableItem;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* Partial implementation of {@link QueueSorter} in terms of {@link Comparator}.
*
* @author Kohsuke Kawaguchi
* @since 1.343
*/
public abstract class AbstractQueueSorterImpl extends QueueSorter implements Comparator<BuildableItem> {
@Override
public void sortBuildableItems(List<BuildableItem> buildables) {
Collections.sort(buildables,this); // sort is ascending order
}
/**
* Override this method to provide the ordering of the sort.
*
* <p>
* if lhs should be build before rhs, return a negative value. Or put another way, think of the comparison
* as a process of converting a {@link BuildableItem} into a number, then doing num(lhs)-num(rhs).
*
* <p>
* The default implementation does FIFO.
*/
public int compare(BuildableItem lhs, BuildableItem rhs) {
return compare(lhs.buildableStartMilliseconds,rhs.buildableStartMilliseconds);
}
/**
* sign(a-b).
*/
protected static int compare(long a, long b) {
if (a>b) return 1;
if (a<b) return -1;
return 0;
}
/**
* sign(a-b).
*/
protected static int compare(int a, int b) {
if (a>b) return 1;
if (a<b) return -1;
return 0;
}
}