diff options
author | Keith Packard <keithp@keithp.com> | 2013-08-29 19:24:51 -0500 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-08-29 19:24:51 -0500 |
commit | de8d9c5630ae46378c50faf97f7d2e97fe139e30 (patch) | |
tree | e8e41e4186c5d27e1a5184d915bdb9f08926fa7a /altoslib/AltosEepromIterable.java | |
parent | ce1378385ef273010498e81c205f42d8e32c7dc1 (diff) |
altoslib, altosui: Restructured state management now does TM eeprom files
Removed uses of AltosRecord from AltosState, now just need to rewrite
the other AltosState changing code to match
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosEepromIterable.java')
-rw-r--r-- | altoslib/AltosEepromIterable.java | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/altoslib/AltosEepromIterable.java b/altoslib/AltosEepromIterable.java index 470a7a8a..8e6a2313 100644 --- a/altoslib/AltosEepromIterable.java +++ b/altoslib/AltosEepromIterable.java @@ -21,6 +21,74 @@ import java.io.*; import java.util.*; import java.text.*; +class AltosEepromOrdered implements Comparable<AltosEepromOrdered> { + AltosEeprom eeprom; + int index; + int tick; + + int cmdi() { + if (eeprom.cmd == AltosLib.AO_LOG_FLIGHT) + return 0; + return 1; + } + + public int compareTo(AltosEepromOrdered o) { + int cmd_diff = cmdi() - o.cmdi(); + + if (cmd_diff != 0) + return cmd_diff; + + int tick_diff = tick - o.tick; + + if (tick_diff != 0) + return tick_diff; + return index - o.index; + } + + AltosEepromOrdered (AltosEeprom eeprom, int index, int tick) { + this.eeprom = eeprom; + this.index = index; + this.tick = tick; + } +} + +class AltosEepromOrderedIterator implements Iterator<AltosEeprom> { + TreeSet<AltosEepromOrdered> olist; + Iterator<AltosEepromOrdered> oiterator; + + public AltosEepromOrderedIterator(Iterable<AltosEeprom> eeproms) { + olist = new TreeSet<AltosEepromOrdered>(); + + int tick = 0; + int index = 0; + boolean first = true; + + for (AltosEeprom e : eeproms) { + int t = e.tick; + if (first) + tick = t; + else { + while (t < tick - 32767) + t += 65536; + tick = t; + } + olist.add(new AltosEepromOrdered(e, index++, tick)); + } + oiterator = olist.iterator(); + } + + public boolean hasNext() { + return oiterator.hasNext(); + } + + public AltosEeprom next() { + return oiterator.next().eeprom; + } + + public void remove () { + } +} + public class AltosEepromIterable implements Iterable<AltosEeprom> { public LinkedList<AltosEeprom> eeproms; @@ -30,7 +98,7 @@ public class AltosEepromIterable implements Iterable<AltosEeprom> { } public AltosState state() { - AltosState state = new AltosState(null); + AltosState state = new AltosState(); for (AltosEeprom header : eeproms) header.update_state(state); @@ -44,6 +112,6 @@ public class AltosEepromIterable implements Iterable<AltosEeprom> { public Iterator<AltosEeprom> iterator() { if (eeproms == null) eeproms = new LinkedList<AltosEeprom>(); - return eeproms.iterator(); + return new AltosEepromOrderedIterator(eeproms); } }
\ No newline at end of file |