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