44 #ifdef CHECK_MEMORY_LEAKS
46 #endif // CHECK_MEMORY_LEAKS
61 unsigned int references,
const RGBColor& c,
62 const std::vector<SUMOVehicleParameter::Stop> &stops)
63 :
Named(id), myEdges(edges),
64 myReferenceCounter(references),
65 myColor(c), myStops(stops) {}
82 return (
unsigned)
myEdges.size();
131 RouteDict::iterator it =
myDict.find(
id);
133 RouteDistDict::iterator it2 =
myDistDict.find(
id);
134 if (it2 ==
myDistDict.end() || it2->second->getOverallProb() == 0) {
137 return it2->second->get();
145 RouteDistDict::iterator it2 =
myDistDict.find(
id);
159 for (RouteDict::iterator i =
myDict.begin(); i !=
myDict.end(); ++i) {
169 for (RouteDict::const_iterator i =
myDict.begin(); i !=
myDict.end(); ++i) {
170 into.push_back((*i).first);
173 into.push_back((*i).first);
180 MSEdgeVector::const_iterator i =
myEdges.begin();
184 for (; i !=
myEdges.end(); ++i) {
189 if (upTo || i !=
myEdges.end() - 1) {
198 std::vector<MSEdge*>::const_iterator i = edgelist.begin();
199 for (; i != edgelist.end(); ++i) {
216 MSRoute::dict_saveState(std::ostream& os) {
218 for (RouteDict::iterator it =
myDict.begin(); it !=
myDict.end(); ++it) {
223 std::vector<unsigned int> follow;
224 unsigned int maxFollow = 0;
225 const MSEdge* prev = edges.front();
226 for (MSEdgeVector::const_iterator i = edges.begin() + 1; i != edges.end(); ++i) {
227 unsigned int idx = 0;
233 follow.push_back(idx);
234 if (idx > maxFollow) {
246 if (follow.empty()) {
247 for (MSEdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
251 const unsigned int bits = maxFollow > 3 ? 4 : 2;
252 const unsigned int numFields = 8 *
sizeof(
unsigned int) / bits;
255 unsigned int data = 0;
256 unsigned int field = 0;
257 for (std::vector<unsigned int>::const_iterator i = follow.begin(); i != follow.end(); ++i) {
260 if (field == numFields) {
276 const unsigned int size = (
unsigned int)(*it).second->getVals().size();
278 for (
unsigned int i = 0; i <
size; ++i) {
288 unsigned int numRoutes;
290 for (; numRoutes > 0; numRoutes--) {
293 unsigned int numEdges;
295 unsigned int references;
300 const unsigned int bits = -first;
301 const unsigned int numFields = 8 *
sizeof(
unsigned int) / bits;
303 const unsigned int mask = (1 << bits) - 1;
305 edges.reserve(numEdges);
310 edges.push_back(prev);
313 unsigned int field = numFields;
314 for (; numEdges > 0; numEdges--) {
315 if (field == numFields) {
319 unsigned int followIndex = (data >> ((numFields - field - 1) * bits)) & mask;
321 edges.push_back(prev);
330 for (
int numFollows = numEdges - 1; numFollows > 0; numFollows -= numFields) {
337 edges.reserve(numEdges);
340 for (; numEdges > 0; numEdges--) {
351 for (; numEdges > 0; numEdges--) {
358 unsigned int numRouteDists;
359 bis >> numRouteDists;
360 for (; numRouteDists > 0; numRouteDists--) {
367 for (; no > 0; no--) {
374 dist->
add(prob, r,
false);
378 for (; no > 0; no--) {
393 for (MSEdgeVector::const_iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
394 ret += (*i)->getLength();
402 bool isFirstIteration =
true;
404 MSEdgeVector::const_iterator it = std::find(
myEdges.begin(),
myEdges.end(), fromEdge);
410 if (fromEdge == toEdge && fromPos <= toPos) {
412 return (toPos - fromPos);
414 for (; it !=
end(); ++it) {
415 if ((*it) == toEdge && !isFirstIteration) {
419 const std::vector<MSLane*>& lanes = (*it)->getLanes();
420 distance += lanes[0]->getLength();
421 #ifdef HAVE_INTERNAL_LANES
423 for (std::vector<MSLane*>::const_iterator laneIt = lanes.begin(); laneIt != lanes.end(); laneIt++) {
424 const MSLinkCont& links = (*laneIt)->getLinkCont();
425 for (MSLinkCont::const_iterator linkIt = links.begin(); linkIt != links.end(); linkIt++) {
426 if ((*linkIt) == 0 || (*linkIt)->getLane() == 0) {
429 std::string succLaneId = (*(it + 1))->getLanes()[0]->getID();
430 if ((*linkIt)->getLane()->getID().compare(succLaneId) == 0) {
431 distance += (*linkIt)->getLength();
437 isFirstIteration =
false;
449 const std::vector<SUMOVehicleParameter::Stop> &