Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ArrayUtils.java')
-rw-r--r--android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ArrayUtils.java187
1 files changed, 187 insertions, 0 deletions
diff --git a/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ArrayUtils.java b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ArrayUtils.java
new file mode 100644
index 0000000000..d806ec5992
--- /dev/null
+++ b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ArrayUtils.java
@@ -0,0 +1,187 @@
+
+package org.holoeverywhere.util;
+
+import java.lang.reflect.Array;
+
+public class ArrayUtils {
+ private static final int CACHE_SIZE = 73;
+ private static Object[] EMPTY = new Object[0];
+ private static Object[] sCache = new Object[ArrayUtils.CACHE_SIZE];
+
+ @SuppressWarnings("unchecked")
+ public static <T> T[] appendElement(Class<T> kind, T[] array, T element) {
+ final T[] result;
+ final int end;
+ if (array != null) {
+ end = array.length;
+ result = (T[]) Array.newInstance(kind, end + 1);
+ System.arraycopy(array, 0, result, 0, end);
+ } else {
+ end = 0;
+ result = (T[]) Array.newInstance(kind, 1);
+ }
+ result[end] = element;
+ return result;
+ }
+
+ public static int[] appendInt(int[] cur, int val) {
+ if (cur == null) {
+ return new int[] {
+ val
+ };
+ }
+ final int N = cur.length;
+ for (int i = 0; i < N; i++) {
+ if (cur[i] == val) {
+ return cur;
+ }
+ }
+ int[] ret = new int[N + 1];
+ System.arraycopy(cur, 0, ret, 0, N);
+ ret[N] = val;
+ return ret;
+ }
+
+ public static boolean contains(int[] array, int value) {
+ for (int element : array) {
+ if (element == value) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static <T> boolean contains(T[] array, T value) {
+ for (T element : array) {
+ if (element == null) {
+ if (value == null) {
+ return true;
+ }
+ } else {
+ if (value != null && element.equals(value)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T> T[] emptyArray(Class<T> kind) {
+ if (kind == Object.class) {
+ return (T[]) ArrayUtils.EMPTY;
+ }
+ int bucket = (System.identityHashCode(kind) / 8 & 0x7FFFFFFF)
+ % ArrayUtils.CACHE_SIZE;
+ Object cache = ArrayUtils.sCache[bucket];
+ if (cache == null || cache.getClass().getComponentType() != kind) {
+ cache = Array.newInstance(kind, 0);
+ ArrayUtils.sCache[bucket] = cache;
+ }
+ return (T[]) cache;
+ }
+
+ public static boolean equals(byte[] array1, byte[] array2, int length) {
+ if (array1 == array2) {
+ return true;
+ }
+ if (array1 == null || array2 == null || array1.length < length
+ || array2.length < length) {
+ return false;
+ }
+ for (int i = 0; i < length; i++) {
+ if (array1[i] != array2[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static int idealBooleanArraySize(int need) {
+ return ArrayUtils.idealByteArraySize(need);
+ }
+
+ public static int idealByteArraySize(int need) {
+ for (int i = 4; i < 32; i++) {
+ if (need <= (1 << i) - 12) {
+ return (1 << i) - 12;
+ }
+ }
+
+ return need;
+ }
+
+ public static int idealCharArraySize(int need) {
+ return ArrayUtils.idealByteArraySize(need * 2) / 2;
+ }
+
+ public static int idealFloatArraySize(int need) {
+ return ArrayUtils.idealByteArraySize(need * 4) / 4;
+ }
+
+ public static int idealIntArraySize(int need) {
+ return ArrayUtils.idealByteArraySize(need * 4) / 4;
+ }
+
+ public static int idealLongArraySize(int need) {
+ return ArrayUtils.idealByteArraySize(need * 8) / 8;
+ }
+
+ public static int idealObjectArraySize(int need) {
+ return ArrayUtils.idealByteArraySize(need * 4) / 4;
+ }
+
+ public static int idealShortArraySize(int need) {
+ return ArrayUtils.idealByteArraySize(need * 2) / 2;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T> T[] removeElement(Class<T> kind, T[] array, T element) {
+ if (array != null) {
+ final int length = array.length;
+ for (int i = 0; i < length; i++) {
+ if (array[i] == element) {
+ if (length == 1) {
+ return null;
+ }
+ T[] result = (T[]) Array.newInstance(kind, length - 1);
+ System.arraycopy(array, 0, result, 0, i);
+ System.arraycopy(array, i + 1, result, i, length - i - 1);
+ return result;
+ }
+ }
+ }
+ return array;
+ }
+
+ public static int[] removeInt(int[] cur, int val) {
+ if (cur == null) {
+ return null;
+ }
+ final int N = cur.length;
+ for (int i = 0; i < N; i++) {
+ if (cur[i] == val) {
+ int[] ret = new int[N - 1];
+ if (i > 0) {
+ System.arraycopy(cur, 0, ret, 0, i);
+ }
+ if (i < N - 1) {
+ System.arraycopy(cur, i + 1, ret, i, N - i - 1);
+ }
+ return ret;
+ }
+ }
+ return cur;
+ }
+
+ public static long total(long[] array) {
+ long total = 0;
+ for (long value : array) {
+ total += value;
+ }
+ return total;
+ }
+
+ private ArrayUtils() {
+ }
+}