SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SUMORouteHandler.cpp
Go to the documentation of this file.
1 /****************************************************************************/
10 // Parser for routes during their loading
11 /****************************************************************************/
12 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
13 // Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
14 /****************************************************************************/
15 //
16 // This file is part of SUMO.
17 // SUMO is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 /****************************************************************************/
23 
24 
25 // ===========================================================================
26 // included modules
27 // ===========================================================================
28 #ifdef _MSC_VER
29 #include <windows_config.h>
30 #else
31 #include <config.h>
32 #endif
33 
34 #include <string>
35 #include <map>
36 #include <vector>
40 #include <utils/common/ToString.h>
44 #include "SUMORouteHandler.h"
45 
46 #ifdef CHECK_MEMORY_LEAKS
47 #include <foreign/nvwa/debug_new.h>
48 #endif // CHECK_MEMORY_LEAKS
49 
50 
51 // ===========================================================================
52 // method definitions
53 // ===========================================================================
54 SUMORouteHandler::SUMORouteHandler(const std::string& file) :
55  SUMOSAXHandler(file),
56  myVehicleParameter(0),
57  myLastDepart(-1),
58  myActiveRouteColor(0),
59  myCurrentVType(0),
60  myBeginDefault(string2time(OptionsCont::getOptions().getString("begin"))),
61  myEndDefault(string2time(OptionsCont::getOptions().getString("end"))) {
62 }
63 
64 
66 }
67 
68 
71  return myLastDepart;
72 }
73 
74 
75 bool
79  WRITE_WARNING("Route file should be sorted by departure time, ignoring '" + myVehicleParameter->id + "'!");
80  return false;
81  }
82  }
83  return true;
84 }
85 
86 
87 void
91  }
92  // else: we don't know when this vehicle will depart. keep the previous known depart time
93 }
94 
95 
96 void
98  const SUMOSAXAttributes& attrs) {
99  switch (element) {
100  case SUMO_TAG_VEHICLE:
101  delete myVehicleParameter;
103  break;
104  case SUMO_TAG_PERSON:
105  delete myVehicleParameter;
107  break;
108  case SUMO_TAG_FLOW:
109  delete myVehicleParameter;
111  break;
112  case SUMO_TAG_VTYPE:
114  break;
117  break;
118  case SUMO_TAG_ROUTE:
119  openRoute(attrs);
120  break;
122  openRouteDistribution(attrs);
123  break;
124  case SUMO_TAG_STOP:
125  addStop(attrs);
126  break;
127  case SUMO_TAG_TRIP: {
129  if (myVehicleParameter->id == "") {
130  //@todo warn about deprecation of missing trip ids
132  }
135  break;
136  }
137  case SUMO_TAG_INTERVAL: {
138  bool ok;
141  break;
142  }
143  case SUMO_TAG_PARAM:
144  addParam(attrs);
145  break;
146  default:
147  break;
148  }
149 }
150 
151 
152 void
154  switch (element) {
155  case SUMO_TAG_ROUTE:
156  closeRoute();
157  break;
158  case SUMO_TAG_PERSON:
159  closePerson();
160  delete myVehicleParameter;
161  myVehicleParameter = 0;
162  break;
163  case SUMO_TAG_VEHICLE:
165  myVehicleParameter->repetitionNumber++; // for backwards compatibility
166  // it is a flow, thus no break here
167  } else {
168  closeVehicle();
169  delete myVehicleParameter;
170  myVehicleParameter = 0;
171  break;
172  }
173  case SUMO_TAG_FLOW:
174  closeFlow();
175  break;
178  break;
181  break;
182  case SUMO_TAG_VTYPE:
184  break;
185  case SUMO_TAG_INTERVAL:
186  myBeginDefault = string2time(OptionsCont::getOptions().getString("begin"));
187  myEndDefault = string2time(OptionsCont::getOptions().getString("end"));
188  break;
189  case SUMO_TAG_TRIP:
190  delete myVehicleParameter;
191  myVehicleParameter = 0;
192  default:
193  break;
194  }
195 }
196 
197 
198 bool
199 SUMORouteHandler::checkStopPos(SUMOReal& startPos, SUMOReal& endPos, const SUMOReal laneLength,
200  const SUMOReal minLength, const bool friendlyPos) {
201  if (minLength > laneLength) {
202  return false;
203  }
204  if (startPos < 0) {
205  startPos += laneLength;
206  }
207  if (endPos < 0) {
208  endPos += laneLength;
209  }
210  if (endPos < minLength || endPos > laneLength) {
211  if (!friendlyPos) {
212  return false;
213  }
214  if (endPos < minLength) {
215  endPos = minLength;
216  }
217  if (endPos > laneLength) {
218  endPos = laneLength;
219  }
220  }
221  if (startPos < 0 || startPos > endPos - minLength) {
222  if (!friendlyPos) {
223  return false;
224  }
225  if (startPos < 0) {
226  startPos = 0;
227  }
228  if (startPos > endPos - minLength) {
229  startPos = endPos - minLength;
230  }
231  }
232  return true;
233 }
234 
235 
236 void
238  bool ok = true;
239  std::string key = attrs.get<std::string>(SUMO_ATTR_KEY, 0, ok);
240  std::string val = attrs.get<std::string>(SUMO_ATTR_VALUE, 0, ok);
241  if (myVehicleParameter != 0) {
242  myVehicleParameter->addParameter(key, val);
243  } else if (myCurrentVType != 0) {
244  myCurrentVType->addParameter(key, val);
245  }
246 }
247 
248 
249 
250 /****************************************************************************/