package world func (w *World) candSeenResetIfOverflow() { w.candEpoch++ if w.candEpoch != 0 { return } // overflow: reset stamp array for i := range w.candStamp { w.candStamp[i] = 0 } w.candEpoch = 1 } func (w *World) candSeenMark(id PrimitiveID) bool { // ensure stamp capacity uid := uint32(id) if int(uid) >= len(w.candStamp) { // grow to next power-ish n := len(w.candStamp) if n == 0 { n = 1024 } for n <= int(uid) { n *= 2 } ns := make([]uint32, n) copy(ns, w.candStamp) w.candStamp = ns } if w.candStamp[uid] == w.candEpoch { return true } w.candStamp[uid] = w.candEpoch return false }