blob: 563b40a3fd6891939ef9f6acaa910d8d780a31ac [file] [log] [blame]
// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
import com.android.tools.r8.naming.NamingLens;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
public interface PresortedComparable<T> extends Presorted, Comparable<T> {
static <T extends PresortedComparable<T>> boolean isSorted(
List<? extends KeyedDexItem<T>> items) {
return isSorted(items, KeyedDexItem::getKey);
}
static <S, T extends Comparable<T>> boolean isSorted(S[] items, Function<S, T> getter) {
return isSorted(Arrays.asList(items), getter);
}
static <S, T extends Comparable<T>> boolean isSorted(
List<? extends S> items, Function<S, T> getter) {
T current = null;
for (S item : items) {
T next = getter.apply(item);
if (current != null && current.compareTo(next) >= 0) {
return false;
}
current = next;
}
return true;
}
// Slow comparison methods that make no use of indices for comparisons. These are used
// for sorting operations when reading dex files.
int slowCompareTo(T other);
int slowCompareTo(T other, NamingLens namingLens);
// Layered comparison methods that make use of indices for subpart comparisons. These rely
// on subparts already being sorted and having indices assigned.
int layeredCompareTo(T other, NamingLens namingLens);
static <T extends PresortedComparable<T>> int slowCompare(T a, T b) {
return a.slowCompareTo(b);
}
}