From 59f0deff6d7bae22fb1b9a0649f3481b3d287d8e Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 5 Sep 2013 22:55:09 -0700 Subject: [PATCH 1/1] altoslib: Rewrite AltosTelemetryIterable Sort while reading instead of sorting separately. Signed-off-by: Keith Packard --- altoslib/AltosTelemetryIterable.java | 52 ++++++++++++---------------- 1 file changed, 22 insertions(+), 30 deletions(-) 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) { -- 2.30.2