MSEdgeWeightsStorage.cpp
Go to the documentation of this file.00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifdef _MSC_VER
00024 #include <windows_config.h>
00025 #else
00026 #include <config.h>
00027 #endif
00028
00029 #include "MSEdgeWeightsStorage.h"
00030
00031 #ifdef CHECK_MEMORY_LEAKS
00032 #include <foreign/nvwa/debug_new.h>
00033 #endif // CHECK_MEMORY_LEAKS
00034
00035
00036
00037
00038
00039 MSEdgeWeightsStorage::MSEdgeWeightsStorage() throw() {
00040 }
00041
00042
00043 MSEdgeWeightsStorage::~MSEdgeWeightsStorage() throw() {
00044 }
00045
00046
00047 bool
00048 MSEdgeWeightsStorage::retrieveExistingTravelTime(const MSEdge * const e, const SUMOVehicle * const v,
00049 SUMOReal t, SUMOReal &value) const throw() {
00050 std::map<MSEdge*, ValueTimeLine<SUMOReal> >::const_iterator i = myTravelTimes.find((MSEdge*) e);
00051 if (i==myTravelTimes.end()) {
00052 return false;
00053 }
00054 const ValueTimeLine<SUMOReal> &tl = (*i).second;
00055 if (!tl.describesTime(t)) {
00056 return false;
00057 }
00058 value = tl.getValue(t);
00059 return true;
00060 }
00061
00062
00063 bool
00064 MSEdgeWeightsStorage::retrieveExistingEffort(const MSEdge * const e, const SUMOVehicle * const v,
00065 SUMOReal t, SUMOReal &value) const throw() {
00066 std::map<MSEdge*, ValueTimeLine<SUMOReal> >::const_iterator i = myEfforts.find((MSEdge*) e);
00067 if (i==myEfforts.end()) {
00068 return false;
00069 }
00070 const ValueTimeLine<SUMOReal> &tl = (*i).second;
00071 if (!tl.describesTime(t)) {
00072 return false;
00073 }
00074 value = tl.getValue(t);
00075 return true;
00076 }
00077
00078
00079 void
00080 MSEdgeWeightsStorage::addTravelTime(const MSEdge * const e,
00081 SUMOReal begin, SUMOReal end,
00082 SUMOReal value) throw() {
00083 std::map<MSEdge*, ValueTimeLine<SUMOReal> >::iterator i = myTravelTimes.find((MSEdge*) e);
00084 if (i==myTravelTimes.end()) {
00085 myTravelTimes[(MSEdge*)e] = ValueTimeLine<SUMOReal>();
00086 i = myTravelTimes.find((MSEdge*) e);
00087 }
00088 (*i).second.add(begin, end, value);
00089 }
00090
00091
00092 void
00093 MSEdgeWeightsStorage::addEffort(const MSEdge * const e,
00094 SUMOReal begin, SUMOReal end,
00095 SUMOReal value) throw() {
00096 std::map<MSEdge*, ValueTimeLine<SUMOReal> >::iterator i = myEfforts.find((MSEdge*) e);
00097 if (i==myEfforts.end()) {
00098 myEfforts[(MSEdge*)e] = ValueTimeLine<SUMOReal>();
00099 i = myEfforts.find((MSEdge*) e);
00100 }
00101 (*i).second.add(begin, end, value);
00102 }
00103
00104
00105 void
00106 MSEdgeWeightsStorage::removeTravelTime(const MSEdge * const e) throw() {
00107 std::map<MSEdge*, ValueTimeLine<SUMOReal> >::iterator i = myTravelTimes.find((MSEdge*) e);
00108 if (i!=myTravelTimes.end()) {
00109 myTravelTimes.erase(i);
00110 }
00111 }
00112
00113
00114 void
00115 MSEdgeWeightsStorage::removeEffort(const MSEdge * const e) throw() {
00116 std::map<MSEdge*, ValueTimeLine<SUMOReal> >::iterator i = myEfforts.find((MSEdge*) e);
00117 if (i!=myEfforts.end()) {
00118 myEfforts.erase(i);
00119 }
00120 }
00121
00122
00123 bool
00124 MSEdgeWeightsStorage::knowsTravelTime(const MSEdge * const e) const throw() {
00125 return myTravelTimes.find((MSEdge*) e)!=myTravelTimes.end();
00126 }
00127
00128
00129 bool
00130 MSEdgeWeightsStorage::knowsEffort(const MSEdge * const e) const throw() {
00131 return myEfforts.find((MSEdge*) e)!=myEfforts.end();
00132 }
00133
00134
00135
00136
00137