Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a796357 authored by Hai Zhang's avatar Hai Zhang Committed by Android (Google) Code Review
Browse files

Merge "Improve collection code."

parents e57a25ea 600d2fcb
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -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
        }
+16 −10
Original line number Diff line number Diff line
@@ -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
        }
+25 −10
Original line number Diff line number Diff line
@@ -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
        }
+16 −10
Original line number Diff line number Diff line
@@ -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
        }
+18 −12
Original line number Diff line number Diff line
@@ -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
        }
Loading