22 #ifndef DijkstraRouterTT_h 23 #define DijkstraRouterTT_h 70 template<
class E,
class V,
class PF>
79 for (
size_t i = 0; i < noE; i++) {
129 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 && (vehicle == 0 || to != 0));
154 if (PF::operator()(from, vehicle)) {
155 myErrorMsgHandler->
inform(
"Vehicle '" + vehicle->getID() +
"' is not allowed on from edge '" + from->getID() +
"'.");
158 if (PF::operator()(to, vehicle)) {
159 myErrorMsgHandler->
inform(
"Vehicle '" + vehicle->getID() +
"' is not allowed on to edge '" + to->getID() +
"'.");
167 if (toInfo.visited) {
176 fromInfo->traveltime = 0;
186 const E*
const minEdge = minimumInfo->edge;
191 #ifdef DijkstraRouterTT_DEBUG_QUERY_PERF 192 std::cout <<
"visited " +
toString(num_visited) +
" edges (final path length: " +
toString(into.size()) +
")\n";
198 myFound.push_back(minimumInfo);
199 minimumInfo->visited =
true;
200 #ifdef DijkstraRouterTT_DEBUG_QUERY 201 std::cout <<
"DEBUG: hit '" << minEdge->getID() <<
"' TT: " << minimumInfo->traveltime <<
" Q: ";
203 std::cout << (*it)->traveltime <<
"," << (*it)->edge->getID() <<
" ";
209 const std::vector<E*>& successors = minEdge->getSuccessors(vClass);
210 for (
typename std::vector<E*>::const_iterator it = successors.begin(); it != successors.end(); ++it) {
211 const E*
const follower = *it;
214 if (PF::operator()(follower, vehicle)) {
217 const SUMOReal oldEffort = followerInfo->traveltime;
218 if (!followerInfo->visited && traveltime < oldEffort) {
220 followerInfo->prev = minimumInfo;
233 #ifdef DijkstraRouterTT_DEBUG_QUERY_PERF 234 std::cout <<
"visited " +
toString(num_visited) +
" edges (final path length: " +
toString(into.size()) +
")\n";
237 myErrorMsgHandler->
inform(
"No connection between edge '" + from->getID() +
"' and edge '" + to->getID() +
"' found.");
245 for (
typename std::vector<const E*>::const_iterator i = edges.begin(); i != edges.end(); ++i) {
246 if (PF::operator()(*i, v)) {
249 costs += this->
getEffort(*i, v, time + costs);
257 std::vector<const E*> tmp;
258 while (rbegin != 0) {
259 tmp.push_back(rbegin->edge);
260 rbegin = rbegin->prev;
262 std::copy(tmp.rbegin(), tmp.rend(), std::back_inserter(edges));
static MsgHandler * getWarningInstance()
Returns the instance to add warnings to.
EdgeInfo(size_t id)
Constructor.
virtual ~DijkstraRouterTT()
Destructor.
SUMOReal recomputeCosts(const std::vector< const E * > &edges, const V *const v, SUMOTime msTime) const
bool visited
The previous edge.
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...
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
const E * edge
The current edge.
const EdgeInfo & getEdgeInfo(size_t index) const
Computes the shortest path through a network using the Dijkstra algorithm.
void buildPathFrom(const EdgeInfo *rbegin, std::vector< const E * > &edges)
Builds the path from marked edges.
SUMOReal traveltime
Effort to reach the edge.
bool operator()(const EdgeInfo *nod1, const EdgeInfo *nod2) const
Comparing method.
MsgHandler *const myErrorMsgHandler
the handler for routing errors
bool myBulkMode
whether we are currently operating several route queries in a bulk
EdgeInfoByTTComparator myComparator
SUMOReal(* Operation)(const E *const, const V *const, SUMOReal)
Operation myOperation
The object's operation to perform.
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
std::vector< EdgeInfo * > myFound
list of visited Edges (for resetting)
std::vector< EdgeInfo > myEdgeInfos
The container of edge information.
virtual SUMOAbstractRouter< E, V > * clone() const
void inform(std::string msg, bool addType=true)
adds a new error to the list
std::vector< EdgeInfo * > myFrontierList
A container for reusage of the min edge heap.
void endQuery(int visits)
EdgeInfo * prev
The previous edge.
DijkstraRouterTT(size_t noE, bool unbuildIsWarning, Operation operation)
Constructor.
SUMOReal getEffort(const E *const e, const V *const v, SUMOReal t) const
vehicles ignoring classes