altos/lisp: Fix uninitialized values in ao_lisp_make_const
[fw/altos] / altoslib / AltosTelemetryFile.java
1 /*
2  * Copyright © 2013 Keith Packard <keithp@keithp.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17  */
18
19 package org.altusmetrum.altoslib_11;
20
21 import java.io.*;
22 import java.util.*;
23 import java.text.*;
24
25 class AltosTelemetryIterator implements Iterator<AltosState> {
26         AltosState                      state;
27         Iterator<AltosTelemetry>        telems;
28         AltosTelemetry                  next;
29         boolean                         seen;
30
31         public boolean hasNext() {
32                 return !seen || telems.hasNext();
33         }
34
35         public AltosState next() {
36                 if (seen) {
37                         AltosState      n = state.clone();
38                         AltosTelemetry  t = telems.next();
39
40                         t.update_state(n);
41                         state = n;
42                 }
43                 seen = true;
44                 return state;
45         }
46
47         public void remove () {
48         }
49
50         public AltosTelemetryIterator(AltosState start, Iterator<AltosTelemetry> telems) {
51                 this.state = start;
52                 this.telems = telems;
53                 this.seen = false;
54         }
55 }
56
57 public class AltosTelemetryFile extends AltosStateIterable {
58
59         AltosTelemetryIterable  telems;
60         AltosState              start;
61
62         public void write_comments(PrintStream out) {
63         }
64
65         public void write(PrintStream out) {
66
67         }
68
69         public AltosTelemetryFile(FileInputStream input) {
70                 telems = new AltosTelemetryIterable(input);
71                 start = new AltosState();
72
73                 /* Find boost tick */
74                 AltosState      state = start.clone();
75
76                 for (AltosTelemetry telem : telems) {
77                         telem.update_state(state);
78                         state.finish_update();
79                         if (state.state() != AltosLib.ao_flight_invalid && state.state() >= AltosLib.ao_flight_boost) {
80                                 start.set_boost_tick(state.tick);
81                                 break;
82                         }
83                 }
84         }
85
86         public Iterator<AltosState> iterator() {
87                 AltosState                      state = start.clone();
88                 Iterator<AltosTelemetry>        i = telems.iterator();
89
90                 while (i.hasNext() && !state.valid()) {
91                         AltosTelemetry  t = i.next();
92                         t.update_state(state);
93                         state.finish_update();
94                 }
95                 return new AltosTelemetryIterator(state, i);
96         }
97 }