1dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk/* 2dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * Copyright (C) 2017 The Android Open Source Project 3dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * 4dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); 5dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * you may not use this file except in compliance with the License. 6dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * You may obtain a copy of the License at 7dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * 8dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * http://www.apache.org/licenses/LICENSE-2.0 9dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * 10dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * Unless required by applicable law or agreed to in writing, software 11dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * distributed under the License is distributed on an "AS IS" BASIS, 12dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * See the License for the specific language governing permissions and 14dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * limitations under the License. 15dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk */ 1685ef1446b82c8783a50af92c4cb1389fe0d0e907Aurimas Liutikaspackage androidx.slice; 17dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk 18dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk 19ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RestrictTo; 20ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RestrictTo.Scope; 21ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.util.ObjectsCompat; 22dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk 23dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monkimport java.lang.reflect.Array; 24dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk 25dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk/** 26dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk * @hide 27dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk */ 28dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk@RestrictTo(Scope.LIBRARY) 29dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monkclass ArrayUtils { 30dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk 31dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk public static <T> boolean contains(T[] array, T item) { 32dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk for (T t : array) { 3306ab4aa38f82b8e2d9af769f7c777253f2497f93Jake Wharton if (ObjectsCompat.equals(t, item)) { 34dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk return true; 35dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 36dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 37dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk return false; 38dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 39dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk 40dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk public static <T> T[] appendElement(Class<T> kind, T[] array, T element) { 41dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk final T[] result; 42dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk final int end; 43dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk if (array != null) { 44dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk end = array.length; 45dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk result = (T[]) Array.newInstance(kind, end + 1); 46dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk System.arraycopy(array, 0, result, 0, end); 47dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } else { 48dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk end = 0; 49dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk result = (T[]) Array.newInstance(kind, 1); 50dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 51dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk result[end] = element; 52dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk return result; 53dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 54dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk 55dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk public static <T> T[] removeElement(Class<T> kind, T[] array, T element) { 56dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk if (array != null) { 57dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk if (!contains(array, element)) { 58dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk return array; 59dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 60dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk final int length = array.length; 61dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk for (int i = 0; i < length; i++) { 6206ab4aa38f82b8e2d9af769f7c777253f2497f93Jake Wharton if (ObjectsCompat.equals(array[i], element)) { 63dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk if (length == 1) { 64dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk return null; 65dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 66dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk T[] result = (T[]) Array.newInstance(kind, length - 1); 67dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk System.arraycopy(array, 0, result, 0, i); 68dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk System.arraycopy(array, i + 1, result, i, length - i - 1); 69dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk return result; 70dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 71dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 72dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 73dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk return array; 74dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk } 750f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton 760f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton private ArrayUtils() { 770f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton } 78dcb5e2f13fa8471f62a7f4625b4dc6e449358cbdJason Monk} 79