package com.lody.virtual.helper.utils;
import com.lody.virtual.helper.compat.ObjectsCompat;
/**
* @author Lody
*
*/
public class ArrayUtils {
public static <T> boolean contains(T[] array, T value) {
return indexOf(array, value) != -1;
}
public static boolean contains(int[] array, int value) {
if (array == null) return false;
for (int element : array) {
if (element == value) {
return true;
}
}
return false;
}
/**
* Return first index of {@code value} in {@code array}, or {@code -1} if
* not found.
*/
public static <T> int indexOf(T[] array, T value) {
if (array == null) return -1;
for (int i = 0; i < array.length; i++) {
if (ObjectsCompat.equals(array[i], value)) return i;
}
return -1;
}
public static int protoIndexOf(Class<?>[] array, Class<?> type) {
if (array == null) return -1;
for (int i = 0; i < array.length; i++) {
if (array[i] == type) return i;
}
return -1;
}
public static int indexOfFirst(Object[] array, Class<?> type) {
if (!isEmpty(array)) {
int N = -1;
for (Object one : array) {
N++;
if (one != null && type == one.getClass()) {
return N;
}
}
}
return -1;
}
public static int protoIndexOf(Class<?>[] array, Class<?> type, int sequence) {
if (array == null) {
return -1;
}
while (sequence < array.length) {
if (type == array[sequence]) {
return sequence;
}
sequence++;
}
return -1;
}
public static int indexOfObject(Object[] array, Class<?> type, int sequence) {
if (array == null) {
return -1;
}
while (sequence < array.length) {
if (type.isInstance(array[sequence])) {
return sequence;
}
sequence++;
}
return -1;
}
public static int indexOf(Object[] array, Class<?> type, int sequence) {
if (!isEmpty(array)) {
int N = -1;
for (Object one : array) {
N++;
if (one != null && one.getClass() == type) {
if (--sequence <= 0) {
return N;
}
}
}
}
return -1;
}
public static int indexOfLast(Object[] array, Class<?> type) {
if (!isEmpty(array)) {
for (int N = array.length; N > 0; N--) {
Object one = array[N - 1];
if (one != null && one.getClass() == type) {
return N - 1;
}
}
}
return -1;
}
public static <T> boolean isEmpty(T[] array) {
return array == null || array.length == 0;
}
@SuppressWarnings("unchecked")
public static <T> T getFirst(Object[] args, Class<?> clazz) {
int index = indexOfFirst(args, clazz);
if (index != -1) {
return (T) args[index];
}
return null;
}
public static void checkOffsetAndCount(int arrayLength, int offset, int count) throws ArrayIndexOutOfBoundsException {
if ((offset | count) < 0 || offset > arrayLength || arrayLength - offset < count) {
throw new ArrayIndexOutOfBoundsException(offset);
}
}
}