SUMO - Simulation of Urban MObility
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
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>
37
#include <
utils/xml/SUMOSAXHandler.h
>
38
#include <
utils/xml/SUMOXMLDefinitions.h
>
39
#include <
utils/common/MsgHandler.h
>
40
#include <
utils/common/ToString.h
>
41
#include <
utils/common/UtilExceptions.h
>
42
#include <
utils/options/OptionsCont.h
>
43
#include <
utils/xml/SUMOVehicleParserHelper.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
65
SUMORouteHandler::~SUMORouteHandler
() {
66
}
67
68
69
SUMOTime
70
SUMORouteHandler::getLastDepart
()
const
{
71
return
myLastDepart
;
72
}
73
74
75
bool
76
SUMORouteHandler::checkLastDepart
() {
77
if
(
myVehicleParameter
->
departProcedure
==
DEPART_GIVEN
) {
78
if
(
myVehicleParameter
->
depart
<
myLastDepart
) {
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
88
SUMORouteHandler::registerLastDepart
() {
89
if
(
myVehicleParameter
->
departProcedure
==
DEPART_GIVEN
) {
90
myLastDepart
=
myVehicleParameter
->
depart
;
91
}
92
// else: we don't know when this vehicle will depart. keep the previous known depart time
93
}
94
95
96
void
97
SUMORouteHandler::myStartElement
(
int
element,
98
const
SUMOSAXAttributes
& attrs) {
99
switch
(element) {
100
case
SUMO_TAG_VEHICLE
:
101
delete
myVehicleParameter
;
102
myVehicleParameter
=
SUMOVehicleParserHelper::parseVehicleAttributes
(attrs);
103
break
;
104
case
SUMO_TAG_PERSON
:
105
delete
myVehicleParameter
;
106
myVehicleParameter
=
SUMOVehicleParserHelper::parseVehicleAttributes
(attrs);
107
break
;
108
case
SUMO_TAG_FLOW
:
109
delete
myVehicleParameter
;
110
myVehicleParameter
=
SUMOVehicleParserHelper::parseFlowAttributes
(attrs,
myBeginDefault
,
myEndDefault
);
111
break
;
112
case
SUMO_TAG_VTYPE
:
113
myCurrentVType
=
SUMOVehicleParserHelper::beginVTypeParsing
(attrs,
getFileName
());
114
break
;
115
case
SUMO_TAG_VTYPE_DISTRIBUTION
:
116
openVehicleTypeDistribution
(attrs);
117
break
;
118
case
SUMO_TAG_ROUTE
:
119
openRoute
(attrs);
120
break
;
121
case
SUMO_TAG_ROUTE_DISTRIBUTION
:
122
openRouteDistribution
(attrs);
123
break
;
124
case
SUMO_TAG_STOP
:
125
addStop
(attrs);
126
break
;
127
case
SUMO_TAG_TRIP
: {
128
myVehicleParameter
=
SUMOVehicleParserHelper::parseVehicleAttributes
(attrs,
true
);
129
if
(
myVehicleParameter
->
id
==
""
) {
130
//@todo warn about deprecation of missing trip ids
131
myVehicleParameter
->
id
=
myIdSupplier
.
getNext
();
132
}
133
myVehicleParameter
->
setParameter
|=
VEHPARS_FORCE_REROUTE
;
134
myActiveRouteID
=
"!"
+
myVehicleParameter
->
id
;
135
break
;
136
}
137
case
SUMO_TAG_INTERVAL
: {
138
bool
ok;
139
myBeginDefault
= attrs.
getSUMOTimeReporting
(
SUMO_ATTR_BEGIN
, 0, ok);
140
myEndDefault
= attrs.
getSUMOTimeReporting
(
SUMO_ATTR_END
, 0, ok);
141
break
;
142
}
143
case
SUMO_TAG_PARAM
:
144
addParam
(attrs);
145
break
;
146
default
:
147
break
;
148
}
149
}
150
151
152
void
153
SUMORouteHandler::myEndElement
(
int
element) {
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
:
164
if
(
myVehicleParameter
->
repetitionNumber
> 0) {
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
;
176
case
SUMO_TAG_VTYPE_DISTRIBUTION
:
177
closeVehicleTypeDistribution
();
178
break
;
179
case
SUMO_TAG_ROUTE_DISTRIBUTION
:
180
closeRouteDistribution
();
181
break
;
182
case
SUMO_TAG_VTYPE
:
183
SUMOVehicleParserHelper::closeVTypeParsing
(*
myCurrentVType
);
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
237
SUMORouteHandler::addParam
(
const
SUMOSAXAttributes
& attrs) {
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
/****************************************************************************/
build
buildd
sumo-0.18~dfsg
src
utils
xml
SUMORouteHandler.cpp
Generated on Wed Oct 23 2013 01:15:12 for SUMO - Simulation of Urban MObility by
1.8.4