22 #ifndef DijkstraRouterTT_h
23 #define DijkstraRouterTT_h
71 template<
class E,
class V,
class PF>
81 for (
size_t i = 0; i < noE; i++) {
127 return nod1->
edge->getNumericalID() > nod2->
edge->getNumericalID();
142 for (
typename std::vector<EdgeInfo*>::iterator i =
myFound.begin(); i !=
myFound.end(); i++) {
151 virtual void compute(
const E* from,
const E* to,
const V*
const vehicle,
152 SUMOTime msTime, std::vector<const E*>& into) {
153 assert(from != 0 && to != 0);
158 EdgeInfo*
const fromInfo = &(
myEdgeInfos[from->getNumericalID()]);
159 fromInfo->traveltime = 0;
168 const E*
const minEdge = minimumInfo->edge;
171 myFound.push_back(minimumInfo);
172 #ifdef DijkstraRouterTT_DEBUG_QUERY
173 std::cout <<
"DEBUG: hit '" << minEdge->getID() <<
"' TT: " << minimumInfo->traveltime <<
" Q: ";
175 std::cout << (*it)->traveltime <<
"," << (*it)->edge->getID() <<
" ";
183 #ifdef DijkstraRouterTT_DEBUG_QUERY_PERF
184 std::cout <<
"visited " +
toString(num_visited) +
" edges (final path length: " +
toString(into.size()) +
")\n";
188 minimumInfo->visited =
true;
189 const SUMOReal traveltime = minimumInfo->traveltime +
getEffort(minEdge, vehicle, time + minimumInfo->traveltime);
192 const unsigned int length_size = minEdge->getNoFollowing();
193 for (i = 0; i < length_size; i++) {
194 const E*
const follower = minEdge->getFollower(i);
195 EdgeInfo*
const followerInfo = &(
myEdgeInfos[follower->getNumericalID()]);
197 if (PF::operator()(follower, vehicle)) {
200 const SUMOReal oldEffort = followerInfo->traveltime;
201 if (!followerInfo->visited && traveltime < oldEffort) {
202 followerInfo->traveltime = traveltime;
203 followerInfo->prev = minimumInfo;
216 #ifdef DijkstraRouterTT_DEBUG_QUERY_PERF
217 std::cout <<
"visited " +
toString(num_visited) +
" edges (final path length: " +
toString(into.size()) +
")\n";
226 for (
typename std::vector<const E*>::const_iterator i = edges.begin(); i != edges.end(); ++i) {
227 if (PF::operator()(*i, v)) {
238 std::deque<const E*> tmp;
239 while (rbegin != 0) {
240 tmp.push_front((E*) rbegin->edge);
241 rbegin = rbegin->prev;
243 std::copy(tmp.begin(), tmp.end(), std::back_inserter(edges));
262 template<
class E,
class V,
class PF>
284 template<
class E,
class V,
class PF>