12290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn/* 22290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * Copyright (C) 2013 The Android Open Source Project 32290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * 42290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 52290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * you may not use this file except in compliance with the License. 62290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * You may obtain a copy of the License at 72290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * 82290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 92290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * 102290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * Unless required by applicable law or agreed to in writing, software 112290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 122290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * See the License for the specific language governing permissions and 142290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn * limitations under the License. 152290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn */ 162290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 172290993eddf5262a8df7fc9478daed52401e325aDianne Hackbornpackage android.support.v4.util; 182290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 192290993eddf5262a8df7fc9478daed52401e325aDianne Hackbornclass ContainerHelpers { 202290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn static final int[] EMPTY_INTS = new int[0]; 212290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn static final long[] EMPTY_LONGS = new long[0]; 222290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn static final Object[] EMPTY_OBJECTS = new Object[0]; 232290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 242290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn public static int idealIntArraySize(int need) { 252290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn return idealByteArraySize(need * 4) / 4; 262290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 272290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 282290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn public static int idealLongArraySize(int need) { 292290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn return idealByteArraySize(need * 8) / 8; 302290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 312290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 322290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn public static int idealByteArraySize(int need) { 332290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn for (int i = 4; i < 32; i++) 342290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn if (need <= (1 << i) - 12) 352290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn return (1 << i) - 12; 362290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 372290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn return need; 382290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 392290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 402290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn public static boolean equal(Object a, Object b) { 412290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn return a == b || (a != null && a.equals(b)); 422290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 432290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 442290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn // This is Arrays.binarySearch(), but doesn't do any argument validation. 452290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn static int binarySearch(int[] array, int size, int value) { 462290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn int lo = 0; 472290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn int hi = size - 1; 482290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 492290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn while (lo <= hi) { 502290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn int mid = (lo + hi) >>> 1; 512290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn int midVal = array[mid]; 522290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 532290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn if (midVal < value) { 542290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn lo = mid + 1; 552290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } else if (midVal > value) { 562290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn hi = mid - 1; 572290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } else { 582290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn return mid; // value found 592290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 602290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 612290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn return ~lo; // value not present 622290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 632290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 642290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn static int binarySearch(long[] array, int size, long value) { 652290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn int lo = 0; 662290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn int hi = size - 1; 672290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 682290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn while (lo <= hi) { 692290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn final int mid = (lo + hi) >>> 1; 702290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn final long midVal = array[mid]; 712290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn 722290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn if (midVal < value) { 732290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn lo = mid + 1; 742290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } else if (midVal > value) { 752290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn hi = mid - 1; 762290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } else { 772290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn return mid; // value found 782290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 792290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 802290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn return ~lo; // value not present 812290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn } 822290993eddf5262a8df7fc9478daed52401e325aDianne Hackborn} 83