diff options
7 files changed, 123 insertions, 72 deletions
diff --git a/services/permission/java/com/android/server/permission/access/collection/IndexedList.kt b/services/permission/java/com/android/server/permission/access/collection/IndexedList.kt index 9cb2e8660e78..c4d07fe28c94 100644 --- a/services/permission/java/com/android/server/permission/access/collection/IndexedList.kt +++ b/services/permission/java/com/android/server/permission/access/collection/IndexedList.kt @@ -19,8 +19,8 @@ package com.android.server.permission.access.collection typealias IndexedList<T> = ArrayList<T> inline fun <T> IndexedList<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (!predicate(index, this[index])) { + forEachIndexed { index, element -> + if (!predicate(index, element)) { return false } } @@ -28,8 +28,8 @@ inline fun <T> IndexedList<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolea } inline fun <T> IndexedList<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, this[index])) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return true } } @@ -45,6 +45,12 @@ inline fun <T> IndexedList<T>.forEachIndexed(action: (Int, T) -> Unit) { } } +inline fun <T> IndexedList<T>.forEachReversedIndexed(action: (Int, T) -> Unit) { + for (index in lastIndex downTo 0) { + action(index, this[index]) + } +} + @Suppress("NOTHING_TO_INLINE") inline operator fun <T> IndexedList<T>.minus(element: T): IndexedList<T> = copy().apply { this -= element } @@ -55,8 +61,8 @@ inline operator fun <T> IndexedList<T>.minusAssign(element: T) { } inline fun <T> IndexedList<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, this[index])) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return false } } @@ -74,8 +80,8 @@ inline operator fun <T> IndexedList<T>.plusAssign(element: T) { inline fun <T> IndexedList<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (predicate(index, this[index])) { + forEachReversedIndexed { index, element -> + if (predicate(index, element)) { removeAt(index) isChanged = true } @@ -85,8 +91,8 @@ inline fun <T> IndexedList<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): inline fun <T> IndexedList<T>.retainAllIndexed(predicate: (Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (!predicate(index, this[index])) { + forEachReversedIndexed { index, element -> + if (!predicate(index, element)) { removeAt(index) isChanged = true } diff --git a/services/permission/java/com/android/server/permission/access/collection/IndexedListSet.kt b/services/permission/java/com/android/server/permission/access/collection/IndexedListSet.kt index 1c42c50e0241..c40f7eefd1d4 100644 --- a/services/permission/java/com/android/server/permission/access/collection/IndexedListSet.kt +++ b/services/permission/java/com/android/server/permission/access/collection/IndexedListSet.kt @@ -70,8 +70,8 @@ class IndexedListSet<T> private constructor( } inline fun <T> IndexedListSet<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (!predicate(index, elementAt(index))) { + forEachIndexed { index, element -> + if (!predicate(index, element)) { return false } } @@ -79,8 +79,8 @@ inline fun <T> IndexedListSet<T>.allIndexed(predicate: (Int, T) -> Boolean): Boo } inline fun <T> IndexedListSet<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, elementAt(index))) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return true } } @@ -93,6 +93,12 @@ inline fun <T> IndexedListSet<T>.forEachIndexed(action: (Int, T) -> Unit) { } } +inline fun <T> IndexedListSet<T>.forEachReversedIndexed(action: (Int, T) -> Unit) { + for (index in lastIndex downTo 0) { + action(index, elementAt(index)) + } +} + inline val <T> IndexedListSet<T>.lastIndex: Int get() = size - 1 @@ -106,8 +112,8 @@ inline operator fun <T> IndexedListSet<T>.minusAssign(element: T) { } inline fun <T> IndexedListSet<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, elementAt(index))) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return false } } @@ -125,8 +131,8 @@ inline operator fun <T> IndexedListSet<T>.plusAssign(element: T) { inline fun <T> IndexedListSet<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (predicate(index, elementAt(index))) { + forEachReversedIndexed { index, element -> + if (predicate(index, element)) { removeAt(index) isChanged = true } @@ -136,8 +142,8 @@ inline fun <T> IndexedListSet<T>.removeAllIndexed(predicate: (Int, T) -> Boolean inline fun <T> IndexedListSet<T>.retainAllIndexed(predicate: (Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (!predicate(index, elementAt(index))) { + forEachReversedIndexed { index, element -> + if (!predicate(index, element)) { removeAt(index) isChanged = true } diff --git a/services/permission/java/com/android/server/permission/access/collection/IndexedMap.kt b/services/permission/java/com/android/server/permission/access/collection/IndexedMap.kt index 2448ff0755be..43f18e27f7aa 100644 --- a/services/permission/java/com/android/server/permission/access/collection/IndexedMap.kt +++ b/services/permission/java/com/android/server/permission/access/collection/IndexedMap.kt @@ -21,8 +21,8 @@ import android.util.ArrayMap typealias IndexedMap<K, V> = ArrayMap<K, V> inline fun <K, V> IndexedMap<K, V>.allIndexed(predicate: (Int, K, V) -> Boolean): Boolean { - for (index in 0 until size) { - if (!predicate(index, keyAt(index), valueAt(index))) { + forEachIndexed { index, key, value -> + if (!predicate(index, key, value)) { return false } } @@ -30,8 +30,8 @@ inline fun <K, V> IndexedMap<K, V>.allIndexed(predicate: (Int, K, V) -> Boolean) } inline fun <K, V> IndexedMap<K, V>.anyIndexed(predicate: (Int, K, V) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, keyAt(index), valueAt(index))) { + forEachIndexed { index, key, value -> + if (predicate(index, key, value)) { return true } } @@ -46,8 +46,8 @@ inline fun <K, V> IndexedMap<K, V>.copy(copyValue: (V) -> V): IndexedMap<K, V> = } inline fun <K, V, R> IndexedMap<K, V>.firstNotNullOfOrNullIndexed(transform: (Int, K, V) -> R): R? { - for (index in 0 until size) { - transform(index, keyAt(index), valueAt(index))?.let { return it } + forEachIndexed { index, key, value -> + transform(index, key, value)?.let { return it } } return null } @@ -64,6 +64,12 @@ inline fun <K, V> IndexedMap<K, V>.forEachKeyIndexed(action: (Int, K) -> Unit) { } } +inline fun <K, V> IndexedMap<K, V>.forEachReversedIndexed(action: (Int, K, V) -> Unit) { + for (index in lastIndex downTo 0) { + action(index, keyAt(index), valueAt(index)) + } +} + inline fun <K, V> IndexedMap<K, V>.forEachValueIndexed(action: (Int, V) -> Unit) { for (index in 0 until size) { action(index, valueAt(index)) @@ -90,6 +96,15 @@ inline operator fun <K, V> IndexedMap<K, V>.minusAssign(key: K) { remove(key) } +inline fun <K, V> IndexedMap<K, V>.noneIndexed(predicate: (Int, K, V) -> Boolean): Boolean { + forEachIndexed { index, key, value -> + if (predicate(index, key, value)) { + return false + } + } + return true +} + @Suppress("NOTHING_TO_INLINE") inline fun <K, V> IndexedMap<K, V>.putWithDefault(key: K, value: V, defaultValue: V): V { val index = indexOfKey(key) @@ -113,8 +128,8 @@ inline fun <K, V> IndexedMap<K, V>.putWithDefault(key: K, value: V, defaultValue inline fun <K, V> IndexedMap<K, V>.removeAllIndexed(predicate: (Int, K, V) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (predicate(index, keyAt(index), valueAt(index))) { + forEachReversedIndexed { index, key, value -> + if (predicate(index, key, value)) { removeAt(index) isChanged = true } @@ -124,8 +139,8 @@ inline fun <K, V> IndexedMap<K, V>.removeAllIndexed(predicate: (Int, K, V) -> Bo inline fun <K, V> IndexedMap<K, V>.retainAllIndexed(predicate: (Int, K, V) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (!predicate(index, keyAt(index), valueAt(index))) { + forEachReversedIndexed { index, key, value -> + if (!predicate(index, key, value)) { removeAt(index) isChanged = true } diff --git a/services/permission/java/com/android/server/permission/access/collection/IndexedSet.kt b/services/permission/java/com/android/server/permission/access/collection/IndexedSet.kt index faaa6d3a23f1..13fa31f01864 100644 --- a/services/permission/java/com/android/server/permission/access/collection/IndexedSet.kt +++ b/services/permission/java/com/android/server/permission/access/collection/IndexedSet.kt @@ -21,8 +21,8 @@ import android.util.ArraySet typealias IndexedSet<T> = ArraySet<T> inline fun <T> IndexedSet<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (!predicate(index, elementAt(index))) { + forEachIndexed { index, element -> + if (!predicate(index, element)) { return false } } @@ -30,8 +30,8 @@ inline fun <T> IndexedSet<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean } inline fun <T> IndexedSet<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, elementAt(index))) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return true } } @@ -50,6 +50,12 @@ inline fun <T> IndexedSet<T>.forEachIndexed(action: (Int, T) -> Unit) { } } +inline fun <T> IndexedSet<T>.forEachReversedIndexed(action: (Int, T) -> Unit) { + for (index in lastIndex downTo 0) { + action(index, elementAt(index)) + } +} + inline val <T> IndexedSet<T>.lastIndex: Int get() = size - 1 @@ -63,8 +69,8 @@ inline operator fun <T> IndexedSet<T>.minusAssign(element: T) { } inline fun <T> IndexedSet<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, elementAt(index))) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return false } } @@ -82,8 +88,8 @@ inline operator fun <T> IndexedSet<T>.plusAssign(element: T) { inline fun <T> IndexedSet<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (predicate(index, elementAt(index))) { + forEachReversedIndexed { index, element -> + if (predicate(index, element)) { removeAt(index) isChanged = true } @@ -93,8 +99,8 @@ inline fun <T> IndexedSet<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): B inline fun <T> IndexedSet<T>.retainAllIndexed(predicate: (Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (!predicate(index, elementAt(index))) { + forEachReversedIndexed { index, element -> + if (!predicate(index, element)) { removeAt(index) isChanged = true } diff --git a/services/permission/java/com/android/server/permission/access/collection/IntMap.kt b/services/permission/java/com/android/server/permission/access/collection/IntMap.kt index 0044b7359ef3..3e05939382d3 100644 --- a/services/permission/java/com/android/server/permission/access/collection/IntMap.kt +++ b/services/permission/java/com/android/server/permission/access/collection/IntMap.kt @@ -21,8 +21,8 @@ import android.util.SparseArray typealias IntMap<T> = SparseArray<T> inline fun <T> IntMap<T>.allIndexed(predicate: (Int, Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (!predicate(index, keyAt(index), valueAt(index))) { + forEachIndexed { index, key, value -> + if (!predicate(index, key, value)) { return false } } @@ -30,8 +30,8 @@ inline fun <T> IntMap<T>.allIndexed(predicate: (Int, Int, T) -> Boolean): Boolea } inline fun <T> IntMap<T>.anyIndexed(predicate: (Int, Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, keyAt(index), valueAt(index))) { + forEachIndexed { index, key, value -> + if (predicate(index, key, value)) { return true } } @@ -46,8 +46,8 @@ inline fun <T> IntMap<T>.copy(copyValue: (T) -> T): IntMap<T> = } inline fun <T, R> IntMap<T>.firstNotNullOfOrNullIndexed(transform: (Int, Int, T) -> R): R? { - for (index in 0 until size) { - transform(index, keyAt(index), valueAt(index))?.let { return it } + forEachIndexed { index, key, value -> + transform(index, key, value)?.let { return it } } return null } @@ -64,6 +64,12 @@ inline fun <T> IntMap<T>.forEachKeyIndexed(action: (Int, Int) -> Unit) { } } +inline fun <T> IntMap<T>.forEachReversedIndexed(action: (Int, Int, T) -> Unit) { + for (index in lastIndex downTo 0) { + action(index, keyAt(index), valueAt(index)) + } +} + inline fun <T> IntMap<T>.forEachValueIndexed(action: (Int, T) -> Unit) { for (index in 0 until size) { action(index, valueAt(index)) @@ -91,8 +97,8 @@ inline operator fun <T> IntMap<T>.minusAssign(key: Int) { } inline fun <T> IntMap<T>.noneIndexed(predicate: (Int, Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, keyAt(index), valueAt(index))) { + forEachIndexed { index, key, value -> + if (predicate(index, key, value)) { return false } } @@ -122,8 +128,8 @@ inline fun <T> IntMap<T>.putWithDefault(key: Int, value: T, defaultValue: T): T inline fun <T> IntMap<T>.removeAllIndexed(predicate: (Int, Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (predicate(index, keyAt(index), valueAt(index))) { + forEachReversedIndexed { index, key, value -> + if (predicate(index, key, value)) { removeAt(index) isChanged = true } @@ -133,8 +139,8 @@ inline fun <T> IntMap<T>.removeAllIndexed(predicate: (Int, Int, T) -> Boolean): inline fun <T> IntMap<T>.retainAllIndexed(predicate: (Int, Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (!predicate(index, keyAt(index), valueAt(index))) { + forEachReversedIndexed { index, key, value -> + if (!predicate(index, key, value)) { removeAt(index) isChanged = true } diff --git a/services/permission/java/com/android/server/permission/access/collection/IntSet.kt b/services/permission/java/com/android/server/permission/access/collection/IntSet.kt index 0d75a4c87a89..4717251e9153 100644 --- a/services/permission/java/com/android/server/permission/access/collection/IntSet.kt +++ b/services/permission/java/com/android/server/permission/access/collection/IntSet.kt @@ -54,8 +54,8 @@ class IntSet private constructor( fun IntSet(values: IntArray): IntSet = IntSet().apply{ this += values } inline fun IntSet.allIndexed(predicate: (Int, Int) -> Boolean): Boolean { - for (index in 0 until size) { - if (!predicate(index, elementAt(index))) { + forEachIndexed { index, element -> + if (!predicate(index, element)) { return false } } @@ -63,8 +63,8 @@ inline fun IntSet.allIndexed(predicate: (Int, Int) -> Boolean): Boolean { } inline fun IntSet.anyIndexed(predicate: (Int, Int) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, elementAt(index))) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return true } } @@ -77,6 +77,12 @@ inline fun IntSet.forEachIndexed(action: (Int, Int) -> Unit) { } } +inline fun IntSet.forEachReversedIndexed(action: (Int, Int) -> Unit) { + for (index in lastIndex downTo 0) { + action(index, elementAt(index)) + } +} + inline val IntSet.lastIndex: Int get() = size - 1 @@ -89,8 +95,8 @@ inline operator fun IntSet.minusAssign(element: Int) { } inline fun IntSet.noneIndexed(predicate: (Int, Int) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, elementAt(index))) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return false } } @@ -115,8 +121,8 @@ operator fun IntSet.plusAssign(array: IntArray) { inline fun IntSet.removeAllIndexed(predicate: (Int, Int) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (predicate(index, elementAt(index))) { + forEachReversedIndexed { index, element -> + if (predicate(index, element)) { removeAt(index) isChanged = true } @@ -126,8 +132,8 @@ inline fun IntSet.removeAllIndexed(predicate: (Int, Int) -> Boolean): Boolean { inline fun IntSet.retainAllIndexed(predicate: (Int, Int) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (!predicate(index, elementAt(index))) { + forEachReversedIndexed { index, element -> + if (!predicate(index, element)) { removeAt(index) isChanged = true } diff --git a/services/permission/java/com/android/server/permission/access/collection/List.kt b/services/permission/java/com/android/server/permission/access/collection/List.kt index d35e69e88e72..91f15bcfb3e2 100644 --- a/services/permission/java/com/android/server/permission/access/collection/List.kt +++ b/services/permission/java/com/android/server/permission/access/collection/List.kt @@ -17,8 +17,8 @@ package com.android.server.permission.access.collection inline fun <T> List<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (!predicate(index, this[index])) { + forEachIndexed { index, element -> + if (!predicate(index, element)) { return false } } @@ -26,8 +26,8 @@ inline fun <T> List<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean { } inline fun <T> List<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, this[index])) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return true } } @@ -40,9 +40,15 @@ inline fun <T> List<T>.forEachIndexed(action: (Int, T) -> Unit) { } } +inline fun <T> List<T>.forEachReversedIndexed(action: (Int, T) -> Unit) { + for (index in lastIndex downTo 0) { + action(index, this[index]) + } +} + inline fun <T> List<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean { - for (index in 0 until size) { - if (predicate(index, this[index])) { + forEachIndexed { index, element -> + if (predicate(index, element)) { return false } } @@ -51,8 +57,8 @@ inline fun <T> List<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean { inline fun <T> MutableList<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (predicate(index, this[index])) { + forEachReversedIndexed { index, element -> + if (predicate(index, element)) { removeAt(index) isChanged = true } @@ -62,8 +68,8 @@ inline fun <T> MutableList<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): inline fun <T> MutableList<T>.retainAllIndexed(predicate: (Int, T) -> Boolean): Boolean { var isChanged = false - for (index in lastIndex downTo 0) { - if (!predicate(index, this[index])) { + forEachReversedIndexed { index, element -> + if (!predicate(index, element)) { removeAt(index) isChanged = true } |