zeolite-lang-0.22.0.0: example/primes/primes-demo.0rx
concrete PrimesDemo {
@type run () -> ()
}
define PrimesDemo {
run () {
PrimeTracker tracker <- PrimeTracker.create()
ThreadFlag flag <- ThreadFlag.new()
Thread thread <- ProcessThread.from(PrimeThread.create(flag,tracker)).start()
// Interactive input loop.
scoped {
TextReader reader <- TextReader.fromBlockReader(BasicInput.stdin())
} in while (!reader.pastEnd()) {
$Hidden[tracker,thread]$
\ BasicOutput.stderr()
.writeNow("Press [Enter] to toggle start/stop computation thread. Type \"exit\" to exit.\n")
String input <- reader.readNextLine()
if (reader.pastEnd()) {
break
}
if (input == "") {
if (flag.getEnabled()) {
\ flag.stop()
\ BasicOutput.stderr().writeNow("Stopped.\n")
} else {
\ flag.start()
\ BasicOutput.stderr().writeNow("Started.\n")
}
} elif (input == "exit") {
break
} else {
\ BasicOutput.stderr().writeNow("Please try again!\n")
}
}
// Wait for the thread to exit, then print the results.
\ flag.cancel()
\ BasicOutput.stderr().writeNow("Exiting.\n")
\ thread.join()
traverse (tracker.getResults() -> Int prime) {
\ BasicOutput.stdout()
.write(prime)
.write("\n")
.flush()
}
}
}