1 /* <lambda>null2 * Copyright 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.room.migration.bundle 18 19 /** Utility class to run schema equality on collections. */ 20 internal object SchemaEqualityUtil { 21 fun <T, K : SchemaEquality<K>> checkSchemaEquality( 22 map1: Map<T, K>?, 23 map2: Map<T, K>? 24 ): Boolean { 25 return when { 26 map1 == null -> map2 == null 27 map2 == null -> false 28 map1.size != map2.size -> false 29 else -> map1.entries.all { checkSchemaEquality(it.value, map2.get(it.key)) } 30 } 31 } 32 33 fun <K : SchemaEquality<K>> checkSchemaEquality(list1: List<K>?, list2: List<K>?): Boolean { 34 return when { 35 list1 == null -> list2 == null 36 list2 == null -> false 37 list1.size != list2.size -> false 38 else -> list1.all { item1 -> list2.any { item2 -> checkSchemaEquality(item1, item2) } } 39 } 40 } 41 42 fun <K : SchemaEquality<K>> checkSchemaEquality(item1: K?, item2: K?): Boolean { 43 return when { 44 item1 == null -> item2 == null 45 item2 == null -> false 46 else -> item1.isSchemaEqual(item2) 47 } 48 } 49 50 inline fun <K, reified R> Map<K, *>.filterValuesInstance(): Map<K, R> = buildMap { 51 this@filterValuesInstance.forEach { (key, value) -> if (value is R) put(key, value) } 52 } 53 } 54