ContainerHelpers.java revision 3ac77bf186f87ecad4bf0063b2f6c4384efbd56a
1/* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.support.v4.util; 18 19class ContainerHelpers { 20 static final int[] EMPTY_INTS = new int[0]; 21 static final long[] EMPTY_LONGS = new long[0]; 22 static final Object[] EMPTY_OBJECTS = new Object[0]; 23 24 public static int idealIntArraySize(int need) { 25 return idealByteArraySize(need * 4) / 4; 26 } 27 28 public static int idealLongArraySize(int need) { 29 return idealByteArraySize(need * 8) / 8; 30 } 31 32 public static int idealByteArraySize(int need) { 33 for (int i = 4; i < 32; i++) 34 if (need <= (1 << i) - 12) 35 return (1 << i) - 12; 36 37 return need; 38 } 39 40 public static boolean equal(Object a, Object b) { 41 return a == b || (a != null && a.equals(b)); 42 } 43 44 // This is Arrays.binarySearch(), but doesn't do any argument validation. 45 static int binarySearch(int[] array, int size, int value) { 46 int lo = 0; 47 int hi = size - 1; 48 49 while (lo <= hi) { 50 int mid = (lo + hi) >>> 1; 51 int midVal = array[mid]; 52 53 if (midVal < value) { 54 lo = mid + 1; 55 } else if (midVal > value) { 56 hi = mid - 1; 57 } else { 58 return mid; // value found 59 } 60 } 61 return ~lo; // value not present 62 } 63 64 static int binarySearch(long[] array, int size, long value) { 65 int lo = 0; 66 int hi = size - 1; 67 68 while (lo <= hi) { 69 final int mid = (lo + hi) >>> 1; 70 final long midVal = array[mid]; 71 72 if (midVal < value) { 73 lo = mid + 1; 74 } else if (midVal > value) { 75 hi = mid - 1; 76 } else { 77 return mid; // value found 78 } 79 } 80 return ~lo; // value not present 81 } 82} 83