22 #ifndef DijkstraRouterEffort_h
23 #define DijkstraRouterEffort_h
66 template<
class E,
class V,
class PF>
76 for (
size_t i = 0; i < noE; i++) {
125 return nod1->
edge->getNumericalID() > nod2->
edge->getNumericalID();
141 for (
typename std::vector<EdgeInfo*>::iterator i =
myFound.begin(); i !=
myFound.end(); i++) {
150 virtual void compute(
const E* from,
const E* to,
const V*
const vehicle,
151 SUMOTime msTime, std::vector<const E*>& into) {
152 assert(from != 0 && to != 0);
156 EdgeInfo*
const fromInfo = &(
myEdgeInfos[from->getNumericalID()]);
157 fromInfo->effort = 0;
167 const E*
const minEdge = minimumInfo->edge;
170 myFound.push_back(minimumInfo);
177 minimumInfo->visited =
true;
178 const SUMOReal effort = minimumInfo->effort +
getEffort(minEdge, vehicle, minimumInfo->leaveTime);
179 const SUMOReal leaveTime = minimumInfo->leaveTime +
getTravelTime(minEdge, vehicle, minimumInfo->leaveTime);
182 const unsigned int length_size = minEdge->getNoFollowing();
183 for (i = 0; i < length_size; i++) {
184 const E*
const follower = minEdge->getFollower(i);
185 EdgeInfo*
const followerInfo = &(
myEdgeInfos[follower->getNumericalID()]);
187 if (PF::operator()(follower, vehicle)) {
190 const SUMOReal oldEffort = followerInfo->effort;
191 if (!followerInfo->visited && effort < oldEffort) {
192 followerInfo->effort = effort;
193 followerInfo->leaveTime = leaveTime;
194 followerInfo->prev = minimumInfo;
214 for (
typename std::vector<const E*>::const_iterator i = edges.begin(); i != edges.end(); ++i) {
215 if (PF::operator()(*i, v)) {
227 std::deque<const E*> tmp;
228 while (rbegin != 0) {
229 tmp.push_front((E*) rbegin->edge);
230 rbegin = rbegin->prev;
232 std::copy(tmp.begin(), tmp.end(), std::back_inserter(edges));
252 template<
class E,
class V,
class PF>
281 template<
class E,
class V,
class PF>