36 #include <xercesc/sax/HandlerBase.hpp>
37 #include <xercesc/sax/AttributeList.hpp>
38 #include <xercesc/sax/SAXParseException.hpp>
39 #include <xercesc/sax/SAXException.hpp>
53 #ifdef CHECK_MEMORY_LEAKS
55 #endif // CHECK_MEMORY_LEAKS
64 myHaveWarnedAboutDeprecatedLanes(false),
65 myErrorMsgHandler(
OptionsCont::getOptions().getBool(
"ignore-errors.connections") ?
97 WRITE_WARNING(
"Target edge '" + toEdge->
getID() +
"' is not connected with '" + fromEdge->
getID() +
"'; the connection cannot be reset.");
105 if (!
parseLaneInfo(attrs, fromEdge, toEdge, &fromLane, &toLane)) {
111 WRITE_WARNING(
"Edge '" + fromEdge->
getID() +
"' has no connection to lane " +
toString(toLane) +
" of edge '" + toEdge->
getID() +
"'; the connection cannot be reset.");
132 if (toEdge == 0 && to.length() != 0) {
165 size_t div = def.find(
"->");
166 if (div == std::string::npos) {
170 std::string fromDef = def.substr(0, div);
171 std::string toDef = def.substr(div + 2);
175 if (fromDef.find(
'_') != std::string::npos) {
176 fromDef = fromDef.substr(0, fromDef.find(
'_'));
178 if (toDef.find(
'_') != std::string::npos) {
179 toDef = toDef.substr(0, toDef.find(
'_'));
230 if (t->
getID().substr(0, t->
getID().find(
'/')) != nFrom->
getID().substr(0, nFrom->
getID().find(
'/'))) {
253 if (keepUncontrolled) {
260 int* fromLane,
int* toLane) {
272 int* fromLane,
int* toLane) {
283 if (!ok || st.
size() != 2) {
285 from->
getID() +
"' to '" + to->
getID() +
"'.");
309 if ((!canLanesBeNegative && fromLane < 0) ||
310 static_cast<unsigned int>(fromLane) >= fromEdge->
getNumLanes()) {
313 fromEdge->
getID() +
"' to '" + toEdge->
getID() +
"'.");
316 if ((!canLanesBeNegative && toLane < 0) ||
317 static_cast<unsigned int>(toLane) >= toEdge->
getNumLanes()) {
320 fromEdge->
getID() +
"' to '" + toEdge->
getID() +
"'.");