37 template<
class E,
class C>
53 if (a->traveltime == b->traveltime) {
54 return a->edge->getNumericalID() > b->edge->getNumericalID();
56 return a->traveltime > b->traveltime;
76 for (
typename std::vector<E*>::iterator i =
myFound.begin(); i !=
myFound.end(); i++) {
89 start->traveltime = 0;
91 start->permissions = start->edge->getPermissions();
101 for (
typename CHConnections::iterator it = min->followers.begin(); it != min->followers.end(); it++) {
103 E* follower = con.target;
104 if (follower == excluded) {
107 const double traveltime = min->traveltime + con.cost;
108 const double oldTraveltime = follower->traveltime;
109 if (!follower->visited && traveltime < oldTraveltime) {
110 follower->traveltime = traveltime;
111 follower->depth = min->depth + 1;
112 follower->permissions = (min->permissions & con.permissions);
113 if (oldTraveltime == std::numeric_limits<double>::max()) {
146 const C*
const aInfo = it->first;
147 const C*
const fInfo = it->second;
149 aInfo->target, fInfo->target, excluded, (aInfo->permissions & fInfo->permissions));
150 const double viaCost = aInfo->cost + fInfo->cost;
151 if (viaCost < bestWitness) {
164 start->traveltime = 0;
171 return dest->traveltime;
178 for (
typename CHConnections::iterator it = min->followers.begin(); it != min->followers.end(); it++) {
180 E* follower = con.target;
181 if (follower == excluded) {
184 if ((con.permissions & permissions) != permissions) {
187 const double traveltime = min->traveltime + con.cost;
188 const double oldTraveltime = follower->traveltime;
189 if (!follower->visited && traveltime < oldTraveltime) {
190 follower->traveltime = traveltime;
191 follower->depth = min->depth + 1;
192 follower->permissions = (min->permissions & con.permissions);
193 if (oldTraveltime == std::numeric_limits<double>::max()) {
205 return dest->traveltime;
211 std::cout <<
"computed SPT from '" << start->edge->getID() <<
"' (excluding " << excluded->edge->getID() <<
") with " <<
myFound.size() <<
" edges\n";
212 for (
typename std::vector<E*>::iterator it = vec.begin(); it != vec.end(); it++) {
214 std::cout <<
"(" << e->edge->getID() <<
"," << e->traveltime <<
") ";