2f7d7aed31
Hopefully, this'll make this code a bit easier to approach.
39 lines
850 B
Go
39 lines
850 B
Go
package simulation
|
|
|
|
import (
|
|
"math/rand"
|
|
|
|
"github.com/filecoin-project/go-address"
|
|
)
|
|
|
|
// actorIter is a simple persistent iterator that loops over a set of actors.
|
|
type actorIter struct {
|
|
actors []address.Address
|
|
offset int
|
|
}
|
|
|
|
// shuffle randomly permutes the set of actors.
|
|
func (p *actorIter) shuffle() {
|
|
rand.Shuffle(len(p.actors), func(i, j int) {
|
|
p.actors[i], p.actors[j] = p.actors[j], p.actors[i]
|
|
})
|
|
}
|
|
|
|
// next returns the next actor's address and advances the iterator.
|
|
func (p *actorIter) next() address.Address {
|
|
next := p.actors[p.offset]
|
|
p.offset++
|
|
p.offset %= len(p.actors)
|
|
return next
|
|
}
|
|
|
|
// add adds a new actor to the iterator.
|
|
func (p *actorIter) add(addr address.Address) {
|
|
p.actors = append(p.actors, addr)
|
|
}
|
|
|
|
// len returns the number of actors in the iterator.
|
|
func (p *actorIter) len() int {
|
|
return len(p.actors)
|
|
}
|