From: Keith Packard Date: Fri, 6 Sep 2013 05:55:09 +0000 (-0700) Subject: altoslib: Rewrite AltosTelemetryIterable X-Git-Tag: 1.2.9.4~86 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=59f0deff6d7bae22fb1b9a0649f3481b3d287d8e;ds=sidebyside altoslib: Rewrite AltosTelemetryIterable Sort while reading instead of sorting separately. Signed-off-by: Keith Packard --- diff --git a/altoslib/AltosTelemetryIterable.java b/altoslib/AltosTelemetryIterable.java index 8075b8a3..9da3b0e6 100644 --- a/altoslib/AltosTelemetryIterable.java +++ b/altoslib/AltosTelemetryIterable.java @@ -42,38 +42,18 @@ class AltosTelemetryOrdered implements Comparable { } class AltosTelemetryOrderedIterator implements Iterator { - TreeSet olist; - Iterator oiterator; - - public AltosTelemetryOrderedIterator(Iterable telems) { - olist = new TreeSet(); - - int tick = 0; - int index = 0; - boolean first = true; - - for (AltosTelemetry e : telems) { - int t = e.tick; - if (first) - tick = t; - else { - while (t < tick - 32767) - t += 65536; - tick = t; - } - olist.add(new AltosTelemetryOrdered(e, index++, tick)); - first = false; - } + Iterator iterator; - oiterator = olist.iterator(); + public AltosTelemetryOrderedIterator(TreeSet telems) { + iterator = telems.iterator(); } public boolean hasNext() { - return oiterator.hasNext(); + return iterator.hasNext(); } public AltosTelemetry next() { - return oiterator.next().telem; + return iterator.next().telem; } public void remove () { @@ -81,16 +61,28 @@ class AltosTelemetryOrderedIterator implements Iterator { } public class AltosTelemetryIterable implements Iterable { - LinkedList telems; + TreeSet telems; + int tick; + int index; + + public void add (AltosTelemetry telem) { + int t = telem.tick; + if (!telems.isEmpty()) { + while (t < tick - 32767) + t += 65536; + } + tick = t; + telems.add(new AltosTelemetryOrdered(telem, index++, tick)); + } public Iterator iterator () { - if (telems == null) - telems = new LinkedList(); return new AltosTelemetryOrderedIterator(telems); } public AltosTelemetryIterable (FileInputStream input) { - telems = new LinkedList (); + telems = new TreeSet (); + tick = 0; + index = 0; try { for (;;) { @@ -102,7 +94,7 @@ public class AltosTelemetryIterable implements Iterable { AltosTelemetry telem = AltosTelemetry.parse(line); if (telem == null) break; - telems.add(telem); + add(telem); } catch (ParseException pe) { System.out.printf("parse exception %s\n", pe.getMessage()); } catch (AltosCRCException ce) {