22 #ifndef DijkstraRouterEffort_h 23 #define DijkstraRouterEffort_h 65 template<
class E,
class V,
class PF>
74 for (
size_t i = 0; i < noE; i++) {
127 return nod1->
edge->getNumericalID() > nod2->
edge->getNumericalID();
143 for (
typename std::vector<EdgeInfo*>::iterator i =
myFound.begin(); i !=
myFound.end(); i++) {
152 virtual void compute(
const E* from,
const E* to,
const V*
const vehicle,
153 SUMOTime msTime, std::vector<const E*>& into) {
154 assert(from != 0 && to != 0);
156 if (PF::operator()(from, vehicle)) {
157 myErrorMsgHandler->
inform(
"Vehicle '" + vehicle->getID() +
"' is not allowed on from edge '" + from->getID() +
"'.");
160 if (PF::operator()(to, vehicle)) {
161 myErrorMsgHandler->
inform(
"Vehicle '" + vehicle->getID() +
"' is not allowed on to edge '" + to->getID() +
"'.");
168 if (toInfo.visited) {
177 fromInfo->effort = 0;
188 const E*
const minEdge = minimumInfo->edge;
191 myFound.push_back(minimumInfo);
198 minimumInfo->visited =
true;
202 const std::vector<E*>& successors = minEdge->getSuccessors(vClass);
203 for (
typename std::vector<E*>::const_iterator it = successors.begin(); it != successors.end(); ++it) {
204 const E*
const follower = *it;
207 if (PF::operator()(follower, vehicle)) {
210 const SUMOReal oldEffort = followerInfo->effort;
211 if (!followerInfo->visited && effort < oldEffort) {
212 followerInfo->effort =
effort;
214 followerInfo->prev = minimumInfo;
227 myErrorMsgHandler->
inform(
"No connection between edge '" + from->getID() +
"' and edge '" + to->getID() +
"' found.");
234 for (
typename std::vector<const E*>::const_iterator i = edges.begin(); i != edges.end(); ++i) {
235 if (PF::operator()(*i, v)) {
247 std::vector<const E*> tmp;
248 while (rbegin != 0) {
249 tmp.push_back(rbegin->edge);
250 rbegin = rbegin->prev;
252 std::copy(tmp.rbegin(), tmp.rend(), std::back_inserter(edges));
static MsgHandler * getWarningInstance()
Returns the instance to add warnings to.
Computes the shortest path through a network using the Dijkstra algorithm.
SUMOReal getTravelTime(const E *const e, const V *const v, SUMOReal t) const
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
SUMOReal(* Operation)(const E *const, const V *const, SUMOReal)
bool operator()(EdgeInfo *nod1, EdgeInfo *nod2) const
Comparing method.
SUMOReal recomputeCosts(const std::vector< const E * > &edges, const V *const v, SUMOTime msTime) const
std::vector< EdgeInfo > myEdgeInfos
The container of edge information.
MsgHandler *const myErrorMsgHandler
the handler for routing errors
EdgeInfo(size_t id)
Constructor.
virtual void compute(const E *from, const E *to, const V *const vehicle, SUMOTime msTime, std::vector< const E * > &into)
Builds the route between the given edges using the minimum effort at the given time The definition of...
DijkstraRouterEffort(size_t noE, bool unbuildIsWarning, Operation effortOperation, Operation ttOperation)
Constructor.
const E * edge
The current edge.
bool myBulkMode
whether we are currently operating several route queries in a bulk
std::vector< EdgeInfo * > myFound
list of visited Edges (for resetting)
SUMOReal leaveTime
The time the vehicle leaves the edge.
EdgeInfoByEffortComparator myComparator
void buildPathFrom(const EdgeInfo *rbegin, std::vector< const E * > &edges)
Builds the path from marked edges.
Operation myOperation
The object's operation to perform.
bool visited
The previous edge.
SUMOReal effort
Effort to reach the edge.
void inform(std::string msg, bool addType=true)
adds a new error to the list
void endQuery(int visits)
Operation myTTOperation
The object's operation to perform for travel times.
std::vector< EdgeInfo * > myFrontierList
A container for reusage of the min edge heap.
virtual ~DijkstraRouterEffort()
Destructor.
SUMOReal getEffort(const E *const e, const V *const v, SUMOReal t) const
EdgeInfo * prev
The previous edge.
virtual SUMOAbstractRouter< E, V > * clone() const
vehicles ignoring classes