SUMO - Simulation of Urban MObility
SUMOAbstractRouter.h
Go to the documentation of this file.
00001 /****************************************************************************/
00008 // The dijkstra-router
00009 /****************************************************************************/
00010 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
00011 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors
00012 /****************************************************************************/
00013 //
00014 //   This file is part of SUMO.
00015 //   SUMO is free software: you can redistribute it and/or modify
00016 //   it under the terms of the GNU General Public License as published by
00017 //   the Free Software Foundation, either version 3 of the License, or
00018 //   (at your option) any later version.
00019 //
00020 /****************************************************************************/
00021 #ifndef SUMOAbstractRouter_h
00022 #define SUMOAbstractRouter_h
00023 
00024 
00025 // ===========================================================================
00026 // included modules
00027 // ===========================================================================
00028 #ifdef _MSC_VER
00029 #include <windows_config.h>
00030 #else
00031 #include <config.h>
00032 #endif
00033 
00034 #include <string>
00035 #include <vector>
00036 #include <algorithm>
00037 #include <assert.h>
00038 #include <utils/common/SysUtils.h>
00039 #include <utils/common/MsgHandler.h>
00040 #include <utils/common/SUMOTime.h>
00041 #include <utils/common/ToString.h>
00042 
00043 
00044 // ===========================================================================
00045 // class definitions
00046 // ===========================================================================
00051 template<class E, class V>
00052 class SUMOAbstractRouter {
00053 public:
00055     SUMOAbstractRouter(const std::string& type):
00056         myType(type),
00057         myQueryVisits(0),
00058         myNumQueries(0),
00059         myQueryStartTime(0),
00060         myQueryTimeSum(0)
00061     { }
00062 
00064     virtual ~SUMOAbstractRouter() { 
00065         if (myNumQueries > 0) {
00066             WRITE_MESSAGE(myType + " answered " + toString(myNumQueries) + " queries and explored " + toString(double(myQueryVisits) / myNumQueries) +  " edges on average.");
00067             WRITE_MESSAGE(myType + " spent " + toString(myQueryTimeSum) + " ms answering queries (" + toString(double(myQueryTimeSum) / myNumQueries) +  " ms on average).");
00068         }
00069     }
00070 
00073     virtual void compute(const E* from, const E* to, const V* const vehicle,
00074                          SUMOTime msTime, std::vector<const E*> &into) = 0;
00075 
00076     virtual SUMOReal recomputeCosts(const std::vector<const E*> &edges,
00077                                     const V* const v, SUMOTime msTime) const = 0;
00078 
00079     // interface extension for BulkStarRouter
00080     virtual void prepare(const E*, const V*, bool) {
00081         assert(false);
00082     }
00083 
00084     inline void startQuery() {
00085         myNumQueries++;
00086         myQueryStartTime = SysUtils::getCurrentMillis();
00087     }
00088 
00089     inline void endQuery(int visits) {
00090         myQueryVisits += visits;
00091         myQueryTimeSum += (SysUtils::getCurrentMillis() - myQueryStartTime);
00092     }
00093 
00094 private:
00096     const std::string myType;
00098     int myQueryVisits;
00099     int myNumQueries;
00101     long myQueryStartTime;
00102     long myQueryTimeSum;
00103 };
00104 
00105 
00106 template<class E, class V>
00107 struct prohibited_withRestrictions {
00108 public:
00109     inline bool operator()(const E* edge, const V* vehicle) const {
00110         if (std::find(myProhibited.begin(), myProhibited.end(), edge) != myProhibited.end()) {
00111             return true;
00112         }
00113         return edge->prohibits(vehicle);
00114     }
00115 
00116     void prohibit(const std::vector<E*> &toProhibit) {
00117         myProhibited = toProhibit;
00118     }
00119 
00120 protected:
00121     std::vector<E*> myProhibited;
00122 
00123 };
00124 
00125 template<class E, class V>
00126 struct prohibited_noRestrictions {
00127 public:
00128     inline bool operator()(const E*, const V*) const {
00129         return false;
00130     }
00131 };
00132 
00133 
00134 
00135 
00136 #endif
00137 
00138 /****************************************************************************/
00139 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines