--- /dev/null
+
+// Copyright (c) 2010 Anthony Towns
+// GPL v2 or later
+
+package altosui;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.lang.UnsupportedOperationException;
+import java.util.NoSuchElementException;
+import java.util.Iterator;
+
+import altosui.AltosDataPoint;
+import altosui.AltosRecordIterable;
+import altosui.AltosRecord;
+import altosui.AltosState;
+
+class AltosDataPointReader implements Iterable<AltosDataPoint> {
+ Iterator<AltosRecord> iter;
+ AltosState state;
+ AltosRecord record;
+
+ public AltosDataPointReader(Iterable<AltosRecord> reader) {
+ this.iter = reader.iterator();
+ this.state = null;
+ }
+
+ private void read_next_record()
+ throws NoSuchElementException
+ {
+ record = iter.next();
+ state = new AltosState(record, state);
+ }
+
+ private AltosDataPoint current_dp() {
+ assert this.record != null;
+
+ return new AltosDataPoint() {
+ public int version() { return record.version; }
+ public int serial() { return record.serial; }
+ public int flight() { return record.flight; }
+ public String callsign() { return record.callsign; }
+ public double time() { return record.time; }
+ public double rssi() { return record.rssi; }
+
+ public int state() { return record.state; }
+ public String state_name() { return record.state(); }
+
+ public double acceleration() { return record.acceleration(); }
+ public double pressure() { return record.raw_pressure(); }
+ public double altitude() { return record.raw_altitude(); }
+ public double height() { return record.raw_height(); }
+ public double accel_speed() { return record.accel_speed(); }
+ public double baro_speed() { return state.baro_speed; }
+ public double temperature() { return record.temperature(); }
+ public double battery_voltage() { return record.battery_voltage(); }
+ public double drogue_voltage() { return record.drogue_voltage(); }
+ public double main_voltage() { return record.main_voltage(); }
+ };
+ }
+
+ public Iterator<AltosDataPoint> iterator() {
+ return new Iterator<AltosDataPoint>() {
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ public boolean hasNext() {
+ return iter.hasNext();
+ }
+ public AltosDataPoint next() {
+ read_next_record();
+ return current_dp();
+ }
+ };
+ }
+}
+