packages feed

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()
    }
  }
}