package jetbrains.mps.internal.collections.runtime;
/*Generated by MPS */
import jetbrains.mps.baseLanguage.closures.runtime.AdapterClass;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
public class CaseInsensitiveStringComparison {
public CaseInsensitiveStringComparison() {
}
@SuppressWarnings(value = "unchecked")
public static <T> int compare(T a, T b, @AdapterClass(value = "ISelector") _FunctionTypes._return_P1_E0<? extends Comparable<?>, ? super T> selector) {
if (a == b) {
return 0;
}
if (a == null || b == null) {
return (a == null ? -1 : 1);
}
Object selA = selector.invoke(a);
Object selB = selector.invoke(b);
if (selA == selB) {
return 0;
}
if (selA == null || selB == null) {
return (selA == null ? -1 : 1);
}
if ((selA instanceof String) && (selB instanceof String)) {
return String.CASE_INSENSITIVE_ORDER.compare((String) selA, (String) selB);
}
return ((Comparable<Object>) selA).compareTo((Comparable<Object>) selB);
}
}