chiark / gitweb /
rough work in progress; may not build
[tripe-android] / peers.scala
index 931c8f4d27af1faaf63561c8d666b2c42f7fe089..76326be0020ca260c30bdb80cbd7b7b3dd86acba 100644 (file)
@@ -23,36 +23,6 @@ val RX_REF = """(?x) \$ \( ([^)]+) \)""".r;
 val RX_RESOLVE = """(?x) \$ ([46*]*) \[ ([^\]]+) \]""".r;
 val RX_PARENT = """(?x) [^\s,]+""".r
 
-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
-}
-
 object BulkResolver {
   val BREAK = new Breaks;
 }
@@ -93,14 +63,12 @@ class BulkResolver(val nthreads: Int = 8) {
 
   val workers = Array.tabulate(nthreads) { i =>
     thread(s"resolver worker #$i") {
-      breakable {
-       while (true) {
-         val host = ch.read; if (host == null) break;
+      loopUnit { exit =>
+       val host = ch.read; if (host == null) exit;
 println(s";; ${Thread.currentThread.getName} resolving `${host.name}'");
-         try {
-           for (a <- InetAddress.getAllByName(host.name)) host.addaddr(a);
-         } catch { case e: UnknownHostException => () }
-       }
+       try {
+         for (a <- InetAddress.getAllByName(host.name)) host.addaddr(a);
+       } catch { case e: UnknownHostException => () }
       }
 println(s";; ${Thread.currentThread.getName} done'");
       ch.write(null);
@@ -274,7 +242,7 @@ class Config { conf =>
 
   def parseFile(path: File): this.type = {
 println(s";; parse ${path.getPath}");
-    with_cleaner { clean =>
+    withCleaner { clean =>
       val in = new FileReader(path); clean { in.close(); }
 
       val lno = 1;