diff options
author | Keith Packard <keithp@keithp.com> | 2013-09-05 22:55:09 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-09-05 22:55:09 -0700 |
commit | 59f0deff6d7bae22fb1b9a0649f3481b3d287d8e (patch) | |
tree | 58f8b82e664826ab22d086a4a9c50e8c207a9b95 /altoslib/AltosTelemetryIterable.java | |
parent | effc62354fc82bb937c6f445a147fc92153a0731 (diff) |
altoslib: Rewrite AltosTelemetryIterable
Sort while reading instead of sorting separately.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosTelemetryIterable.java')
-rw-r--r-- | altoslib/AltosTelemetryIterable.java | 52 |
1 files 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<AltosTelemetryOrdered> { } class AltosTelemetryOrderedIterator implements Iterator<AltosTelemetry> { - TreeSet<AltosTelemetryOrdered> olist; - Iterator<AltosTelemetryOrdered> oiterator; - - public AltosTelemetryOrderedIterator(Iterable<AltosTelemetry> telems) { - olist = new TreeSet<AltosTelemetryOrdered>(); - - 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<AltosTelemetryOrdered> iterator; - oiterator = olist.iterator(); + public AltosTelemetryOrderedIterator(TreeSet<AltosTelemetryOrdered> 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<AltosTelemetry> { } public class AltosTelemetryIterable implements Iterable<AltosTelemetry> { - LinkedList<AltosTelemetry> telems; + TreeSet<AltosTelemetryOrdered> 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<AltosTelemetry> iterator () { - if (telems == null) - telems = new LinkedList<AltosTelemetry>(); return new AltosTelemetryOrderedIterator(telems); } public AltosTelemetryIterable (FileInputStream input) { - telems = new LinkedList<AltosTelemetry> (); + telems = new TreeSet<AltosTelemetryOrdered> (); + tick = 0; + index = 0; try { for (;;) { @@ -102,7 +94,7 @@ public class AltosTelemetryIterable implements Iterable<AltosTelemetry> { 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) { |