Tidy up unused source
[bus.git] / origin-src / tripstop.cc
1 #include "defuns.h"
2 #include "tripstop.h"
3 #include <algorithm>
4 #include <stdio.h>
5
6
7 using namespace std;
8 using namespace tr1;
9
10
11 TripStop::TripStop(FILE *fp)
12 {
13 assert(fread(&id, sizeof(int32_t), 1, fp) == 1);
14 assert(fread(&type, sizeof(Type), 1, fp) == 1);
15 assert(fread(&lat, sizeof(float), 1, fp) == 1);
16 assert(fread(&lng, sizeof(float), 1, fp) == 1);
17
18 uint8_t have_triphops;
19 assert(fread(&have_triphops, sizeof(uint8_t), 1, fp) == 1);
20
21 if (have_triphops)
22 {
23 tdict = shared_ptr<ServiceDict>(new ServiceDict);
24
25 uint32_t num_service_periods;
26 assert(fread(&num_service_periods, sizeof(uint32_t), 1, fp) == 1);
27 for (uint32_t i=0; i<num_service_periods; i++)
28 {
29 int32_t sp_id;
30 assert(fread(&sp_id, sizeof(int32_t), 1, fp) == 1);
31
32 uint32_t num_route_ids;
33 assert(fread(&num_route_ids, sizeof(uint32_t), 1, fp) == 1);
34 for (uint32_t j=0; j<num_route_ids; j++)
35 {
36 int32_t route_id;
37 assert(fread(&route_id, sizeof(int32_t), 1, fp) == 1);
38
39 uint32_t num_triphops = 0;
40 assert(fread(&num_triphops, sizeof(uint32_t), 1, fp) == 1);
41 (*tdict)[sp_id][route_id].reserve(num_triphops);
42 for (uint32_t k=0; k<num_triphops; k++)
43 {
44 TripHop t;
45 assert(fread(&t, sizeof(TripHop), 1, fp) == 1);
46 assert(t.end_time >= t.start_time); // FIXME: should be >, no?
47 (*tdict)[sp_id][route_id].push_back(t);
48 }
49 }
50
51 }
52 }
53
54 uint32_t num_walkhops = 0;
55 assert(fread(&num_walkhops, sizeof(uint32_t), 1, fp) == 1);
56 for (int i=0; i<num_walkhops; i++)
57 {
58 int32_t dest_id;
59 float walktime;
60 assert(fread(&dest_id, sizeof(int32_t), 1, fp) == 1);
61 assert(fread(&walktime, sizeof(float), 1, fp) == 1);
62 assert(walktime >= 0.0f); // FIXME, should be >, no?
63 add_walkhop(dest_id, walktime);
64 }
65 }
66
67
68 TripStop::TripStop(int32_t _id, Type _type, float _lat, float _lng)
69 {
70 id = _id;
71 type = _type;
72 lat = _lat;
73 lng = _lng;
74 }
75
76
77 TripStop::TripStop()
78 {
79 }
80
81
82 void TripStop::write(FILE *fp)
83 {
84 assert(fwrite(&id, sizeof(int32_t), 1, fp) == 1);
85 assert(fwrite(&type, sizeof(Type), 1, fp) == 1);
86 assert(fwrite(&lat, sizeof(float), 1, fp) == 1);
87 assert(fwrite(&lng, sizeof(float), 1, fp) == 1);
88
89 uint8_t have_triphops = tdict ? 1 : 0;
90 assert(fwrite(&have_triphops, sizeof(uint8_t), 1, fp) == 1);
91
92 if (tdict)
93 {
94 uint32_t num_service_periods = tdict->size();
95 assert(fwrite(&num_service_periods, sizeof(uint32_t), 1, fp) == 1);
96
97 for (ServiceDict::iterator i = tdict->begin(); i != tdict->end(); i++)
98 {
99 assert(fwrite(&(i->first), sizeof(int32_t), 1, fp) == 1);
100 uint32_t num_route_ids = i->second.size();
101 assert(fwrite(&num_route_ids, sizeof(uint32_t), 1, fp) == 1);
102 for (TripHopDict::iterator j = i->second.begin();
103 j != i->second.end(); j++)
104 {
105 int32_t route_id = j->first;
106 assert(fwrite(&route_id, sizeof(int32_t), 1, fp) == 1);
107 uint32_t num_triphops = j->second.size();
108 assert(fwrite(&num_triphops, sizeof(uint32_t), 1, fp) == 1);
109 for (TripHopList::iterator k = j->second.begin();
110 k != j->second.end(); k++)
111 {
112 assert(fwrite(&(*k), sizeof(TripHop), 1, fp) == 1);
113 }
114 }
115 }
116 }
117
118 uint32_t num_walkhops = wlist.size();
119 assert(fwrite(&num_walkhops, sizeof(uint32_t), 1, fp) == 1);
120 for (WalkHopList::iterator i = wlist.begin(); i != wlist.end(); i++)
121 {
122 assert(fwrite(&(*i), sizeof(WalkHop), 1, fp) == 1);
123 }
124 }
125
126
127 static bool sort_triphops(const TripHop &x,
128 const TripHop &y)
129 {
130 return x.start_time < y.start_time;
131 }
132
133
134 void TripStop::add_triphop(int32_t start_time, int32_t end_time,
135 int32_t dest_id, int32_t route_id, int32_t trip_id,
136 int32_t service_id)
137 {
138 if (!tdict)
139 tdict = shared_ptr<ServiceDict>(new ServiceDict);
140
141 (*tdict)[service_id][route_id].push_back(TripHop(start_time, end_time,
142 dest_id, trip_id));
143 ::sort((*tdict)[service_id][route_id].begin(),
144 (*tdict)[service_id][route_id].end(), sort_triphops);
145 }
146
147
148 void TripStop::add_walkhop(int32_t dest_id, float walktime)
149 {
150 wlist.push_front(WalkHop(dest_id, walktime));
151 }
152
153
154 const TripHop * TripStop::find_triphop(int time, int route_id,
155 int32_t service_id)
156 {
157 if (tdict)
158 {
159 for (TripHopList::iterator i = (*tdict)[service_id][route_id].begin();
160 i != (*tdict)[service_id][route_id].end(); i++)
161 {
162 if ((*i).start_time >= time)
163 return &(*i);
164 }
165 }
166
167 return NULL;
168 }
169
170
171 vector<TripHop> TripStop::find_triphops(int time, int route_id,
172 int32_t service_id,
173 int num)
174 {
175 vector<TripHop> tlist;
176
177 if (tdict)
178 {
179 for (TripHopList::iterator i = (*tdict)[service_id][route_id].begin();
180 (i != ((*tdict)[service_id][route_id].end()) && tlist.size() < num);
181 i++)
182 {
183 if ((*i).start_time >= time)
184 tlist.push_back(*i);
185 }
186 }
187
188 return tlist;
189 }
190
191
192 deque<int> TripStop::get_routes(int32_t service_id)
193 {
194 deque<int> routes;
195
196 if (tdict)
197 {
198 for (TripHopDict::iterator i = (*tdict)[service_id].begin();
199 i != (*tdict)[service_id].end(); i++)
200 {
201 routes.push_back(i->first);
202 }
203 }
204
205 return routes;
206 }
207
208