Skip to content

Commit 8660a6d

Browse files
Add predicate APIs to contains and vertexesFor Graph functions
1 parent 8fbcfdf commit 8660a6d

File tree

4 files changed

+20
-9
lines changed

4 files changed

+20
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
### Added
66

7-
- `Graph.toGraphSortedByEdges: Graph`
7+
- `Graph` data structure
88

99
### Changed
1010

kotlin-stdlib/api/android/kotlin-stdlib.api

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ public final class com/javiersc/kotlin/stdlib/StringsTransformKt {
194194
public abstract interface class com/javiersc/kotlin/stdlib/graph/Graph : java/util/Map, kotlin/jvm/internal/markers/KMappedMarker {
195195
public abstract fun asString ()Ljava/lang/String;
196196
public abstract fun contains (Ljava/lang/Object;)Z
197+
public abstract fun contains (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
197198
public abstract fun containsCircularVertexes (Ljava/lang/Object;)Z
198199
public abstract fun doesNotContainsCircularVertexes (Ljava/lang/Object;)Z
199200
public abstract fun getCircularVertexes ()Ljava/util/Map;
@@ -207,13 +208,14 @@ public abstract interface class com/javiersc/kotlin/stdlib/graph/Graph : java/ut
207208
public abstract fun setRenderer (Lkotlin/jvm/functions/Function1;)V
208209
public abstract fun toGraph ()Lcom/javiersc/kotlin/stdlib/graph/Graph;
209210
public abstract fun toGraphSortedByEdges ()Lcom/javiersc/kotlin/stdlib/graph/Graph;
210-
public abstract fun vertexesFor (Ljava/lang/Object;)Ljava/util/List;
211+
public abstract fun vertexesFor (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
211212
public abstract fun vertexesFor ([Ljava/lang/Object;)Ljava/util/List;
212213
}
213214

214215
public final class com/javiersc/kotlin/stdlib/graph/Graph$DefaultImpls {
215216
public static fun asString (Lcom/javiersc/kotlin/stdlib/graph/Graph;)Ljava/lang/String;
216217
public static fun contains (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;)Z
218+
public static fun contains (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
217219
public static fun containsCircularVertexes (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;)Z
218220
public static fun doesNotContainsCircularVertexes (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;)Z
219221
public static fun getCircularVertexes (Lcom/javiersc/kotlin/stdlib/graph/Graph;)Ljava/util/Map;
@@ -224,8 +226,9 @@ public final class com/javiersc/kotlin/stdlib/graph/Graph$DefaultImpls {
224226
public static fun renderer (Lcom/javiersc/kotlin/stdlib/graph/Graph;Lkotlin/jvm/functions/Function1;)V
225227
public static fun toGraph (Lcom/javiersc/kotlin/stdlib/graph/Graph;)Lcom/javiersc/kotlin/stdlib/graph/Graph;
226228
public static fun toGraphSortedByEdges (Lcom/javiersc/kotlin/stdlib/graph/Graph;)Lcom/javiersc/kotlin/stdlib/graph/Graph;
227-
public static fun vertexesFor (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;)Ljava/util/List;
229+
public static fun vertexesFor (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
228230
public static fun vertexesFor (Lcom/javiersc/kotlin/stdlib/graph/Graph;[Ljava/lang/Object;)Ljava/util/List;
231+
public static synthetic fun vertexesFor$default (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/util/List;
229232
}
230233

231234
public final class com/javiersc/kotlin/stdlib/graph/Graph$Edge {
@@ -273,6 +276,7 @@ public final class com/javiersc/kotlin/stdlib/graph/MutableGraph : com/javiersc/
273276
public fun computeIfPresent (Lcom/javiersc/kotlin/stdlib/graph/Graph$Vertex;Ljava/util/function/BiFunction;)Ljava/util/List;
274277
public synthetic fun computeIfPresent (Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;
275278
public fun contains (Ljava/lang/Object;)Z
279+
public fun contains (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
276280
public fun containsCircularVertexes (Ljava/lang/Object;)Z
277281
public fun containsKey (Lcom/javiersc/kotlin/stdlib/graph/Graph$Vertex;)Z
278282
public final fun containsKey (Ljava/lang/Object;)Z
@@ -318,7 +322,7 @@ public final class com/javiersc/kotlin/stdlib/graph/MutableGraph : com/javiersc/
318322
public fun toGraphSortedByEdges ()Lcom/javiersc/kotlin/stdlib/graph/Graph;
319323
public fun toString ()Ljava/lang/String;
320324
public final fun values ()Ljava/util/Collection;
321-
public fun vertexesFor (Ljava/lang/Object;)Ljava/util/List;
325+
public fun vertexesFor (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
322326
public fun vertexesFor ([Ljava/lang/Object;)Ljava/util/List;
323327
}
324328

kotlin-stdlib/api/jvm/kotlin-stdlib.api

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ public final class com/javiersc/kotlin/stdlib/StringsTransformKt {
200200
public abstract interface class com/javiersc/kotlin/stdlib/graph/Graph : java/util/Map, kotlin/jvm/internal/markers/KMappedMarker {
201201
public abstract fun asString ()Ljava/lang/String;
202202
public abstract fun contains (Ljava/lang/Object;)Z
203+
public abstract fun contains (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
203204
public abstract fun containsCircularVertexes (Ljava/lang/Object;)Z
204205
public abstract fun doesNotContainsCircularVertexes (Ljava/lang/Object;)Z
205206
public abstract fun getCircularVertexes ()Ljava/util/Map;
@@ -213,13 +214,14 @@ public abstract interface class com/javiersc/kotlin/stdlib/graph/Graph : java/ut
213214
public abstract fun setRenderer (Lkotlin/jvm/functions/Function1;)V
214215
public abstract fun toGraph ()Lcom/javiersc/kotlin/stdlib/graph/Graph;
215216
public abstract fun toGraphSortedByEdges ()Lcom/javiersc/kotlin/stdlib/graph/Graph;
216-
public abstract fun vertexesFor (Ljava/lang/Object;)Ljava/util/List;
217+
public abstract fun vertexesFor (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
217218
public abstract fun vertexesFor ([Ljava/lang/Object;)Ljava/util/List;
218219
}
219220

220221
public final class com/javiersc/kotlin/stdlib/graph/Graph$DefaultImpls {
221222
public static fun asString (Lcom/javiersc/kotlin/stdlib/graph/Graph;)Ljava/lang/String;
222223
public static fun contains (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;)Z
224+
public static fun contains (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
223225
public static fun containsCircularVertexes (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;)Z
224226
public static fun doesNotContainsCircularVertexes (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;)Z
225227
public static fun getCircularVertexes (Lcom/javiersc/kotlin/stdlib/graph/Graph;)Ljava/util/Map;
@@ -230,8 +232,9 @@ public final class com/javiersc/kotlin/stdlib/graph/Graph$DefaultImpls {
230232
public static fun renderer (Lcom/javiersc/kotlin/stdlib/graph/Graph;Lkotlin/jvm/functions/Function1;)V
231233
public static fun toGraph (Lcom/javiersc/kotlin/stdlib/graph/Graph;)Lcom/javiersc/kotlin/stdlib/graph/Graph;
232234
public static fun toGraphSortedByEdges (Lcom/javiersc/kotlin/stdlib/graph/Graph;)Lcom/javiersc/kotlin/stdlib/graph/Graph;
233-
public static fun vertexesFor (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;)Ljava/util/List;
235+
public static fun vertexesFor (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
234236
public static fun vertexesFor (Lcom/javiersc/kotlin/stdlib/graph/Graph;[Ljava/lang/Object;)Ljava/util/List;
237+
public static synthetic fun vertexesFor$default (Lcom/javiersc/kotlin/stdlib/graph/Graph;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/util/List;
235238
}
236239

237240
public final class com/javiersc/kotlin/stdlib/graph/Graph$Edge {
@@ -279,6 +282,7 @@ public final class com/javiersc/kotlin/stdlib/graph/MutableGraph : com/javiersc/
279282
public fun computeIfPresent (Lcom/javiersc/kotlin/stdlib/graph/Graph$Vertex;Ljava/util/function/BiFunction;)Ljava/util/List;
280283
public synthetic fun computeIfPresent (Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;
281284
public fun contains (Ljava/lang/Object;)Z
285+
public fun contains (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
282286
public fun containsCircularVertexes (Ljava/lang/Object;)Z
283287
public fun containsKey (Lcom/javiersc/kotlin/stdlib/graph/Graph$Vertex;)Z
284288
public final fun containsKey (Ljava/lang/Object;)Z
@@ -324,7 +328,7 @@ public final class com/javiersc/kotlin/stdlib/graph/MutableGraph : com/javiersc/
324328
public fun toGraphSortedByEdges ()Lcom/javiersc/kotlin/stdlib/graph/Graph;
325329
public fun toString ()Ljava/lang/String;
326330
public final fun values ()Ljava/util/Collection;
327-
public fun vertexesFor (Ljava/lang/Object;)Ljava/util/List;
331+
public fun vertexesFor (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
328332
public fun vertexesFor ([Ljava/lang/Object;)Ljava/util/List;
329333
}
330334

kotlin-stdlib/common/main/kotlin/com/javiersc/kotlin/stdlib/graph/Graph.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,19 @@ public interface Graph<T> : Map<Graph.Vertex<T>, List<Graph.Edge<T>>> {
4343

4444
public fun contains(value: T): Boolean = keys.any { it.value == value }
4545

46+
public fun contains(value: T, predicate: (T) -> Boolean): Boolean =
47+
keys.any { predicate(it.value) }
48+
4649
public fun toGraph(): Graph<T> = this
4750

4851
public fun containsCircularVertexes(value: T): Boolean =
4952
circularVertexes[value]?.isNotEmpty() == true
5053

5154
public fun doesNotContainsCircularVertexes(value: T): Boolean = !containsCircularVertexes(value)
5255

53-
public fun vertexesFor(value: T): List<T> {
56+
public fun vertexesFor(value: T, predicate: (T) -> Boolean = { it == value }): List<T> {
5457
if (containsCircularVertexes(value)) return emptyList()
55-
val vertex: Vertex<T> = keys.find { it.value == value } ?: return emptyList()
58+
val vertex: Vertex<T> = keys.find { predicate(it.value) } ?: return emptyList()
5659
val edges: List<Edge<T>> = this[vertex] ?: return emptyList()
5760
val destinationVertexes: Sequence<Vertex<T>> = edges.asSequence().map(Edge<T>::destination)
5861
val destinations: Sequence<T> = destinationVertexes.map(Vertex<T>::value)

0 commit comments

Comments
 (0)