Merge "Add CollectionUtils.indexOfSubArray()"
diff --git a/staticlibs/framework/com/android/net/module/util/CollectionUtils.java b/staticlibs/framework/com/android/net/module/util/CollectionUtils.java
index a16ef33..58689fb 100644
--- a/staticlibs/framework/com/android/net/module/util/CollectionUtils.java
+++ b/staticlibs/framework/com/android/net/module/util/CollectionUtils.java
@@ -165,6 +165,26 @@
}
/**
+ * Returns the index of the needle array in the haystack array, or -1 if it can't be found.
+ * This is a byte array equivalent of Collections.indexOfSubList().
+ */
+ public static int indexOfSubArray(@NonNull byte[] haystack, @NonNull byte[] needle) {
+ for (int i = 0; i < haystack.length - needle.length + 1; i++) {
+ boolean found = true;
+ for (int j = 0; j < needle.length; j++) {
+ if (haystack[i + j] != needle[j]) {
+ found = false;
+ break;
+ }
+ }
+ if (found) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ /**
* Returns a new collection of elements that match the passed predicate.
* @param source the elements to filter.
* @param test the predicate to test for.
diff --git a/staticlibs/tests/unit/src/com/android/net/module/util/CollectionUtilsTest.kt b/staticlibs/tests/unit/src/com/android/net/module/util/CollectionUtilsTest.kt
index 911483a..c925a0c 100644
--- a/staticlibs/tests/unit/src/com/android/net/module/util/CollectionUtilsTest.kt
+++ b/staticlibs/tests/unit/src/com/android/net/module/util/CollectionUtilsTest.kt
@@ -18,6 +18,7 @@
import androidx.test.filters.SmallTest
import androidx.test.runner.AndroidJUnit4
+import com.android.testutils.assertThrows
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.test.assertEquals
@@ -50,6 +51,21 @@
}
@Test
+ fun testIndexOfSubArray() {
+ val haystack = byteArrayOf(1, 2, 3, 4, 5)
+ assertEquals(2, CollectionUtils.indexOfSubArray(haystack, byteArrayOf(3, 4)))
+ assertEquals(3, CollectionUtils.indexOfSubArray(haystack, byteArrayOf(4, 5)))
+ assertEquals(4, CollectionUtils.indexOfSubArray(haystack, byteArrayOf(5)))
+ assertEquals(-1, CollectionUtils.indexOfSubArray(haystack, byteArrayOf(3, 2)))
+ assertEquals(0, CollectionUtils.indexOfSubArray(haystack, byteArrayOf()))
+ assertEquals(-1, CollectionUtils.indexOfSubArray(byteArrayOf(), byteArrayOf(3, 2)))
+ assertEquals(0, CollectionUtils.indexOfSubArray(byteArrayOf(), byteArrayOf()))
+ assertThrows(NullPointerException::class.java) {
+ CollectionUtils.indexOfSubArray(haystack, null)
+ }
+ }
+
+ @Test
fun testAll() {
assertFalse(CollectionUtils.all(listOf("A", "B", "C", "D", "E")) { it != "E" })
assertTrue(CollectionUtils.all(listOf("A", "B", "C", "D", "E")) { it != "F" })