package jetbrains.mps.internal.collections.runtime;
/*Generated by MPS */
import java.util.Comparator;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import jetbrains.mps.baseLanguage.closures.runtime.AdapterClass;
public class SelectComparator<T> implements Comparator<T> {
private final _FunctionTypes._return_P1_E0<? extends Comparable<?>, ? super T> selector;
public SelectComparator(@AdapterClass(value = "ISelector") _FunctionTypes._return_P1_E0<? extends Comparable<?>, ? super T> selector) {
this.selector = selector;
}
@SuppressWarnings(value = "unchecked")
@Override
public int compare(T a, T b) {
if (a == b) {
return 0;
}
if (a == null || b == null) {
return (a == null ? -1 : 1);
}
Comparable<Object> cmpa = (Comparable<Object>) selector.invoke(a);
Comparable<Object> cmpb = (Comparable<Object>) selector.invoke(b);
if (cmpa == cmpb) {
return 0;
}
if (cmpa == null || cmpb == null) {
return (cmpa == null ? -1 : 1);
}
return cmpa.compareTo(cmpb);
}
}