summaryrefslogtreecommitdiff
path: root/opendc-stdlib/src/main/kotlin/com/atlarge/opendc/model/topology/Bootstrap.kt
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-stdlib/src/main/kotlin/com/atlarge/opendc/model/topology/Bootstrap.kt')
-rw-r--r--opendc-stdlib/src/main/kotlin/com/atlarge/opendc/model/topology/Bootstrap.kt23
1 files changed, 23 insertions, 0 deletions
diff --git a/opendc-stdlib/src/main/kotlin/com/atlarge/opendc/model/topology/Bootstrap.kt b/opendc-stdlib/src/main/kotlin/com/atlarge/opendc/model/topology/Bootstrap.kt
new file mode 100644
index 00000000..de9a41d5
--- /dev/null
+++ b/opendc-stdlib/src/main/kotlin/com/atlarge/opendc/model/topology/Bootstrap.kt
@@ -0,0 +1,23 @@
+package com.atlarge.opendc.model.topology
+
+import com.atlarge.opendc.simulator.Bootstrap
+import com.atlarge.opendc.simulator.Entity
+
+/**
+ * Create a [Bootstrap] procedure for the given [Topology].
+ *
+ * @return A bootstrap procedure for the topology.
+ */
+fun <T: Topology> T.bootstrap(): Bootstrap<T> = Bootstrap.create { ctx ->
+ forEach { ctx.register(it) }
+ listeners += object : TopologyListener {
+ override fun Topology.onNodeAdded(node: Entity<*, Topology>) {
+ ctx.register(node)
+ }
+
+ override fun Topology.onNodeRemoved(node: Entity<*, Topology>) {
+ ctx.deregister(node)
+ }
+ }
+ this
+}