-def with_cleaner[T](body: Cleaner => T): T = {
- val cleaner = new Cleaner;
- try { body(cleaner) }
- finally { cleaner.cleanup(); }
-}
-
-class Cleaner {
- var cleanups: List[() => Unit] = Nil;
- def apply(cleanup: => Unit) { cleanups +:= { () => cleanup; } }
- def cleanup() { cleanups foreach { _() } }
-}
-
-def lines(r: Reader) = new Traversable[String] {
- val in: BufferedReader = new BufferedReader(r);
- override def foreach[T](f: String => T) {
- while (true) in.readLine match {
- case null => return;
- case line => f(line);
- }
- }
-}
-
-def thread(name: String, run: Boolean = true, daemon: Boolean = true)
- (body: => Unit): Thread = {
- val t = new Thread(new Runnable { override def run() { body } }, name);
- t.setDaemon(daemon);
- if (run) t.start();
- t
-}
-