yggdrasil-go/cmd/yggdrasilsim/store.go
2020-12-06 20:26:51 +00:00

43 lines
913 B
Go

package main
type nodeStore map[int]*simNode
func linkNodes(a *simNode, b *simNode) {
la := a.core.NewSimlink()
lb := b.core.NewSimlink()
if err := la.SetDestination(lb); err != nil {
panic(err)
}
if err := lb.SetDestination(la); err != nil {
panic(err)
}
if err := la.Start(); err != nil {
panic(err)
}
if err := lb.Start(); err != nil {
panic(err)
}
}
func makeStoreSquareGrid(sideLength int) nodeStore {
store := make(nodeStore)
nNodes := sideLength * sideLength
idxs := make([]int, 0, nNodes)
// TODO shuffle nodeIDs
for idx := 1; idx <= nNodes; idx++ {
idxs = append(idxs, idx)
}
for _, idx := range idxs {
n := newNode(idx)
store[idx] = n
}
for idx := 0; idx < nNodes; idx++ {
if (idx % sideLength) != 0 {
linkNodes(store[idxs[idx]], store[idxs[idx-1]])
}
if idx >= sideLength {
linkNodes(store[idxs[idx]], store[idxs[idx-sideLength]])
}
}
return store
}