Skip to content

Commit 7679763

Browse files
committed
move some logic in extensions
1 parent 1ca3d5c commit 7679763

File tree

17 files changed

+122
-102
lines changed

17 files changed

+122
-102
lines changed

usvm-core/src/main/kotlin/org/usvm/Mocks.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.usvm
33
import io.ksmt.utils.cast
44
import kotlinx.collections.immutable.PersistentList
55
import kotlinx.collections.immutable.persistentListOf
6+
import org.usvm.collections.immutable.getOrDefault
67
import org.usvm.collections.immutable.persistentHashMapOf
78
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
89
import org.usvm.collections.immutable.internal.MutabilityOwnership

usvm-core/src/main/kotlin/org/usvm/collection/array/ArrayRegion.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.usvm.UConcreteHeapAddress
55
import org.usvm.UExpr
66
import org.usvm.UHeapRef
77
import org.usvm.USort
8+
import org.usvm.collections.immutable.getOrPut
89
import org.usvm.uctx
910
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
1011
import org.usvm.collections.immutable.internal.MutabilityOwnership

usvm-core/src/main/kotlin/org/usvm/collection/map/primitive/UMapRegion.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import org.usvm.UHeapRef
66
import org.usvm.USort
77
import org.usvm.collection.map.USymbolicMapKey
88
import org.usvm.collection.set.primitive.USetRegion
9+
import org.usvm.collections.immutable.getOrPut
910
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
1011
import org.usvm.collections.immutable.internal.MutabilityOwnership
1112
import org.usvm.collections.immutable.persistentHashMapOf

usvm-core/src/main/kotlin/org/usvm/collection/map/ref/URefMapRegion.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.usvm.USort
1010
import org.usvm.collection.map.USymbolicMapKey
1111
import org.usvm.collection.set.ref.URefSetEntryLValue
1212
import org.usvm.collection.set.ref.URefSetRegion
13+
import org.usvm.collections.immutable.getOrPut
1314
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
1415
import org.usvm.collections.immutable.internal.MutabilityOwnership
1516
import org.usvm.collections.immutable.persistentHashMapOf

usvm-core/src/main/kotlin/org/usvm/collection/set/primitive/USetRegion.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.usvm.USort
99
import org.usvm.collection.set.USymbolicSetEntries
1010
import org.usvm.collection.set.USymbolicSetElement
1111
import org.usvm.collection.set.USymbolicSetElementsCollector
12+
import org.usvm.collections.immutable.getOrPut
1213
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
1314
import org.usvm.collections.immutable.persistentHashMapOf
1415
import org.usvm.collections.immutable.internal.MutabilityOwnership

usvm-core/src/main/kotlin/org/usvm/collection/set/ref/URefSetRegion.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.usvm.UHeapRef
88
import org.usvm.collection.set.USymbolicSetEntries
99
import org.usvm.collection.set.USymbolicSetElement
1010
import org.usvm.collection.set.USymbolicSetElementsCollector
11+
import org.usvm.collections.immutable.getOrPut
1112
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
1213
import org.usvm.collections.immutable.internal.MutabilityOwnership
1314
import org.usvm.collections.immutable.persistentHashMapOf

usvm-core/src/main/kotlin/org/usvm/constraints/EqualityConstraints.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import org.usvm.algorithms.removeAllValues
1818
import org.usvm.algorithms.multiMapIterator
1919
import org.usvm.collections.immutable.implementations.immutableSet.UPersistentHashSet
2020
import org.usvm.collections.immutable.internal.MutabilityOwnership
21+
import org.usvm.collections.immutable.isEmpty
2122
import org.usvm.isStaticHeapRef
2223
import org.usvm.merging.MutableMergeGuard
2324
import org.usvm.merging.UOwnedMergeable

usvm-core/src/main/kotlin/org/usvm/constraints/TypeConstraints.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import org.usvm.UContext
77
import org.usvm.UHeapRef
88
import org.usvm.USymbolicHeapRef
99
import org.usvm.UNullRef
10+
import org.usvm.collections.immutable.getOrDefault
1011
import org.usvm.isStatic
1112
import org.usvm.isStaticHeapRef
1213
import org.usvm.collections.immutable.persistentHashMapOf
1314
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
1415
import org.usvm.collections.immutable.internal.MutabilityOwnership
16+
import org.usvm.collections.immutable.toMutableMap
1517
import org.usvm.memory.mapWithStaticAsConcrete
1618
import org.usvm.merging.MutableMergeGuard
1719
import org.usvm.merging.UOwnedMergeable

usvm-core/src/main/kotlin/org/usvm/constraints/ULogicalConstraints.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import org.usvm.UBoolExpr
66
import org.usvm.UBoolSort
77
import org.usvm.UContext
88
import org.usvm.algorithms.separate
9+
import org.usvm.collections.immutable.containsAll
910
import org.usvm.collections.immutable.implementations.immutableSet.UPersistentHashSet
1011
import org.usvm.collections.immutable.internal.MutabilityOwnership
12+
import org.usvm.collections.immutable.isEmpty
1113
import org.usvm.isFalse
1214
import org.usvm.merging.MutableMergeGuard
1315
import org.usvm.merging.UOwnedMergeable

usvm-core/src/main/kotlin/org/usvm/constraints/UNumericConstraints.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ import io.ksmt.utils.BvUtils.signedLess
2525
import io.ksmt.utils.BvUtils.signedLessOrEqual
2626
import io.ksmt.utils.asExpr
2727
import io.ksmt.utils.uncheckedCast
28-
import org.usvm.collections.immutable.persistentHashMapOf
29-
import org.usvm.collections.immutable.persistentHashSetOf
3028
import org.usvm.UBoolExpr
3129
import org.usvm.UBvSort
3230
import org.usvm.UContext
@@ -35,6 +33,7 @@ import org.usvm.algorithms.UPersistentMultiMap
3533
import org.usvm.algorithms.addToSet
3634
import org.usvm.algorithms.removeValue
3735
import org.usvm.algorithms.separate
36+
import org.usvm.collections.immutable.*
3837
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
3938
import org.usvm.collections.immutable.internal.MutabilityOwnership
4039
import org.usvm.merging.MutableMergeGuard

usvm-core/src/main/kotlin/org/usvm/memory/Memory.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.usvm.UIndexedMocker
1212
import org.usvm.UMockEvaluator
1313
import org.usvm.UMocker
1414
import org.usvm.USort
15+
import org.usvm.collections.immutable.getOrPut
1516
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
1617
import org.usvm.collections.immutable.internal.MutabilityOwnership
1718
import org.usvm.collections.immutable.persistentHashMapOf

usvm-core/src/main/kotlin/org/usvm/model/ModelRegions.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.usvm.model
33
import io.ksmt.expr.KExpr
44
import org.usvm.UExpr
55
import org.usvm.USort
6+
import org.usvm.collections.immutable.getOrDefault
67
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
78
import org.usvm.collections.immutable.persistentHashMapOf
89
import org.usvm.memory.UMemoryRegion

usvm-jvm/src/main/kotlin/org/usvm/machine/interpreter/statics/JcStaticFieldsRegion.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.usvm.UBoolExpr
1414
import org.usvm.UBoolSort
1515
import org.usvm.UExpr
1616
import org.usvm.USort
17+
import org.usvm.collections.immutable.getOrDefault
1718
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
1819
import org.usvm.collections.immutable.internal.MutabilityOwnership
1920
import org.usvm.collections.immutable.persistentHashMapOf

usvm-util/src/main/kotlin/org/usvm/algorithms/UPersistentMultiMap.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.usvm.algorithms
22

3+
import org.usvm.collections.immutable.*
34
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
45
import org.usvm.collections.immutable.implementations.immutableSet.UPersistentHashSet
56
import org.usvm.collections.immutable.internal.MutabilityOwnership
6-
import org.usvm.collections.immutable.persistentHashSetOf
77

88
typealias UPersistentMultiMap<K, V> = UPersistentHashMap<K, UPersistentHashSet<V>>
99

usvm-util/src/main/kotlin/org/usvm/collections/immutable/extensions.kt

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,51 @@
66

77
package org.usvm.collections.immutable
88

9+
import org.usvm.collections.immutable.implementations.immutableMap.TrieNode
910
import org.usvm.collections.immutable.implementations.immutableMap.UPersistentHashMap
1011
import org.usvm.collections.immutable.implementations.immutableSet.UPersistentHashSet
1112
import org.usvm.collections.immutable.internal.MutabilityOwnership
1213

1314

15+
fun <E> UPersistentHashSet<E>.isEmpty() = none()
16+
17+
fun <E> UPersistentHashSet<E>.isNotEmpty() = any()
18+
19+
fun <E> UPersistentHashSet<E>.addAll(elements: Collection<E>, owner: MutabilityOwnership) : UPersistentHashSet<E> =
20+
elements.fold(this) { node, e -> node.add(e, owner) }
21+
22+
fun <E> UPersistentHashSet<E>.removeAll(elements: Collection<E>, owner: MutabilityOwnership): UPersistentHashSet<E> =
23+
elements.fold(this) { node, e -> node.remove(e, owner) }
24+
25+
fun <E> UPersistentHashSet<E>.removeAll(elements: Iterable<E>, owner: MutabilityOwnership): UPersistentHashSet<E> =
26+
elements.fold(this) { node, e -> node.remove(e, owner) }
27+
28+
fun <E> UPersistentHashSet<E>.containsAll(elements: Collection<E>): Boolean = elements.all { e -> this.contains(e) }
29+
30+
fun <K, V> UPersistentHashMap<K, V>.isEmpty() = none()
31+
32+
fun <K, V> UPersistentHashMap<K, V>.isNotEmpty() = any()
33+
34+
fun <K, V> UPersistentHashMap<K, V>.getOrDefault(key: K, defaultValue: V) = get(key) ?: defaultValue
35+
36+
inline fun <K, V> UPersistentHashMap<K, V>.getOrPut(
37+
key: K,
38+
owner: MutabilityOwnership,
39+
defaultValue: () -> V,
40+
): Pair<TrieNode<K, V>, V> {
41+
val current = get(key) ?: defaultValue().let { return put(key, it, owner) to it }
42+
return this to current
43+
}
44+
45+
fun <K, V> UPersistentHashMap<K, V>.removeAll(keys: Iterable<K>, owner: MutabilityOwnership): UPersistentHashMap<K, V> =
46+
keys.fold(this) { node, k -> node.remove(k, owner) }
47+
48+
fun <K, V> UPersistentHashMap<K, V>.putAll(map: Map<K, V>, owner: MutabilityOwnership): TrieNode<K, V> =
49+
map.asSequence().fold(this) { acc, entry -> acc.put(entry.key, entry.value, owner) }
50+
51+
fun <K, V> UPersistentHashMap<K, V>.toMutableMap(): MutableMap<K, V> =
52+
mutableMapOf<K, V>().also { this.forEach { entry -> it[entry.key] = entry.value } }
53+
1454
/**
1555
* Returns an empty persistent map.
1656
*/
@@ -21,7 +61,7 @@ fun <K, V> persistentHashMapOf(map: Map<K, V>, owner: MutabilityOwnership): UPer
2161
persistentHashMapOf<K, V>().putAll(map, owner)
2262

2363
fun <K, V> persistentHashMapOf(owner: MutabilityOwnership, vararg pairs: Pair<K, V>): UPersistentHashMap<K, V> =
24-
pairs.fold(persistentHashMapOf<K, V>()) { acc, (k, v) -> acc.put(k, v, owner) }
64+
pairs.fold(persistentHashMapOf()) { acc, (k, v) -> acc.put(k, v, owner) }
2565

2666
/**
2767
* Returns an empty persistent set.

0 commit comments

Comments
 (0)