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