X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosTelemetryIterable.java;h=a752e24e4bfd709125ab55ce5e53ebc927bcd70b;hp=8075b8a3274cf6f1706de1719661492c89532ed3;hb=da914cd72411af8c36af05b13c11b9093c8a378c;hpb=5b976a6651f4eb05d30afc08b9e1f27c7e52ae00 diff --git a/altoslib/AltosTelemetryIterable.java b/altoslib/AltosTelemetryIterable.java index 8075b8a3..a752e24e 100644 --- a/altoslib/AltosTelemetryIterable.java +++ b/altoslib/AltosTelemetryIterable.java @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_2; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; @@ -42,38 +43,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,35 +62,43 @@ 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 - 1000) + 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 (); + public AltosTelemetryIterable (FileInputStream input) throws IOException { + telems = new TreeSet (); + tick = 0; + index = 0; - try { - for (;;) { - String line = AltosLib.gets(input); - if (line == null) { + for (;;) { + String line = AltosLib.gets(input); + if (line == null) { + break; + } + try { + AltosTelemetry telem = AltosTelemetry.parse(line); + if (telem == null) break; - } - try { - AltosTelemetry telem = AltosTelemetry.parse(line); - if (telem == null) - break; - telems.add(telem); - } catch (ParseException pe) { - System.out.printf("parse exception %s\n", pe.getMessage()); - } catch (AltosCRCException ce) { - } + add(telem); + } catch (ParseException pe) { + System.out.printf("parse exception %s\n", pe.getMessage()); + } catch (AltosCRCException ce) { } - } catch (IOException io) { - System.out.printf("io exception\n"); } } }