Allow intcode programs to be halted externally

This is simplest to do during an input or output callback, but could potentially also be done to a program running on a goroutine.
This commit is contained in:
2022-06-12 23:49:13 -05:00
parent 0a249b85fc
commit b5202b28c5

View File

@ -24,9 +24,10 @@ const (
)
type IntcodeProgram struct {
memory []int64
program []int64
relativeBase int
memory []int64
program []int64
relativeBase int
haltRequested bool
}
type IntcodeProgramState struct {
@ -141,7 +142,7 @@ func (p *IntcodeProgram) RunIn(inputFunc ProvideInputFunc, outputFunc ReceiveOut
p.init()
inputsRequested := 0
for instructionPointer := 0; instructionPointer < len(p.program); {
for instructionPointer := 0; instructionPointer < len(p.program) && !p.haltRequested; {
instruction := p.GetMemory(instructionPointer)
instructionPointer++
@ -247,4 +248,10 @@ func (p *IntcodeProgram) RunIn(inputFunc ProvideInputFunc, outputFunc ReceiveOut
panic(fmt.Sprintf("exception executing program - unhandled opcode %d", opcode))
}
}
p.haltRequested = false
}
func (p *IntcodeProgram) Stop() {
p.haltRequested = true
}