X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosTelemetryIterable.java;h=ac42597d5935e7a7da957b95a7ef68883828d8ae;hp=b7489f77c64d4f4c7efe22a0f24fdac48ff484c2;hb=c8078d352a7f54a4a97d25af080155d3f875536a;hpb=7ec1b97d278c7aec3199fb7270f0dcf9484c879f diff --git a/altoslib/AltosTelemetryIterable.java b/altoslib/AltosTelemetryIterable.java index b7489f77..ac42597d 100644 --- a/altoslib/AltosTelemetryIterable.java +++ b/altoslib/AltosTelemetryIterable.java @@ -15,21 +15,74 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_1; +package org.altusmetrum.altoslib_5; import java.io.*; import java.util.*; import java.text.*; +class AltosTelemetryOrdered implements Comparable { + AltosTelemetry telem; + int index; + int tick; + + public int compareTo(AltosTelemetryOrdered o) { + int tick_diff = tick - o.tick; + + if (tick_diff != 0) + return tick_diff; + return index - o.index; + } + + AltosTelemetryOrdered (AltosTelemetry telem, int index, int tick) { + this.telem = telem; + this.index = index; + this.tick = tick; + } +} + +class AltosTelemetryOrderedIterator implements Iterator { + Iterator iterator; + + public AltosTelemetryOrderedIterator(TreeSet telems) { + iterator = telems.iterator(); + } + + public boolean hasNext() { + return iterator.hasNext(); + } + + public AltosTelemetry next() { + return iterator.next().telem; + } + + public void remove () { + } +} + 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 - 1000) + t += 65536; + } + tick = t; + telems.add(new AltosTelemetryOrdered(telem, index++, tick)); + } public Iterator iterator () { - return telems.iterator(); + return new AltosTelemetryOrderedIterator(telems); } public AltosTelemetryIterable (FileInputStream input) { - telems = new LinkedList (); + telems = new TreeSet (); + tick = 0; + index = 0; try { for (;;) { @@ -41,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) {