summaryrefslogtreecommitdiff
path: root/opendc-stdlib/src/main/kotlin/com/atlarge/opendc/model/topology/Bootstrap.kt
blob: e0b54a288dff701593f50e901bf78139bbe79387 (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 apply 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
}