summaryrefslogtreecommitdiff
path: root/opendc-stdlib/src/main/kotlin/com/atlarge/opendc/model/topology/Bootstrap.kt
blob: de9a41d5454a76080f3c42867ad545020497e030 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
}