void RONetHandler::parseDistrict(const SUMOSAXAttributes& attrs) { myCurrentEdge = 0; bool ok = true; myCurrentName = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok); if (!ok) { return; } ROEdge* sink = myEdgeBuilder.buildEdge(myCurrentName + "-sink", 0, 0, 0); sink->setType(ROEdge::ET_DISTRICT); myNet.addEdge(sink); ROEdge* source = myEdgeBuilder.buildEdge(myCurrentName + "-source", 0, 0, 0); source->setType(ROEdge::ET_DISTRICT); myNet.addEdge(source); if (attrs.hasAttribute(SUMO_ATTR_EDGES)) { std::vector<std::string> desc = attrs.getStringVector(SUMO_ATTR_EDGES); for (std::vector<std::string>::const_iterator i = desc.begin(); i != desc.end(); ++i) { ROEdge* edge = myNet.getEdge(*i); // check whether the edge exists if (edge == 0) { throw ProcessError("The edge '" + *i + "' within district '" + myCurrentName + "' is not known."); } source->addFollower(edge); edge->addFollower(sink); } } }
void ROJTRTurnDefLoader::myStartElement(int element, const SUMOSAXAttributes& attrs) { bool ok = true; switch (element) { case SUMO_TAG_INTERVAL: myIntervalBegin = attrs.getSUMOTimeReporting(SUMO_ATTR_BEGIN, 0, ok); myIntervalEnd = attrs.getSUMOTimeReporting(SUMO_ATTR_END, 0, ok); break; case SUMO_TAG_FROMEDGE: beginFromEdge(attrs); break; case SUMO_TAG_TOEDGE: addToEdge(attrs); break; case SUMO_TAG_SINK: if (attrs.hasAttribute(SUMO_ATTR_EDGES)) { std::string edges = attrs.get<std::string>(SUMO_ATTR_EDGES, 0, ok); StringTokenizer st(edges, StringTokenizer::WHITECHARS); while (st.hasNext()) { std::string id = st.next(); ROEdge* edge = myNet.getEdge(id); if (edge == 0) { throw ProcessError("The edge '" + id + "' declared as a sink is not known."); } edge->setType(ROEdge::ET_SINK); } } break; case SUMO_TAG_SOURCE: if (attrs.hasAttribute(SUMO_ATTR_EDGES)) { std::string edges = attrs.get<std::string>(SUMO_ATTR_EDGES, 0, ok); StringTokenizer st(edges, StringTokenizer::WHITECHARS); while (st.hasNext()) { std::string id = st.next(); ROEdge* edge = myNet.getEdge(id); if (edge == 0) { throw ProcessError("The edge '" + id + "' declared as a source is not known."); } edge->setType(ROEdge::ET_SOURCE); } } break; default: break; } }