NIVisumTL.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
00024 #ifdef _MSC_VER
00025 #include <windows_config.h>
00026 #else
00027 #include <config.h>
00028 #endif
00029
00030 #include <string>
00031 #include <netbuild/NBLoadedTLDef.h>
00032 #include <netbuild/NBTrafficLightLogicCont.h>
00033 #include "NIVisumTL.h"
00034
00035 #ifdef CHECK_MEMORY_LEAKS
00036 #include <foreign/nvwa/debug_new.h>
00037 #endif // CHECK_MEMORY_LEAKS
00038
00039
00040
00041
00042 using namespace std;
00043
00044
00045
00046
00047
00048
00049
00050 NIVisumTL::TimePeriod::TimePeriod() {
00051 myEndTime = 0;
00052 myStartTime = 0;
00053 }
00054
00055 NIVisumTL::TimePeriod::TimePeriod(SUMOTime StartTime, SUMOTime EndTime) {
00056 myStartTime = StartTime;
00057 myEndTime = EndTime;
00058 }
00059
00060 NIVisumTL::TimePeriod::~TimePeriod() {}
00061
00062 SUMOTime
00063 NIVisumTL::TimePeriod::GetEndTime() {
00064 return myEndTime;
00065 }
00066
00067 SUMOTime
00068 NIVisumTL::TimePeriod::GetStartTime() {
00069 return myStartTime;
00070 }
00071
00072 void
00073 NIVisumTL::TimePeriod::SetEndTime(SUMOTime EndTime) {
00074 myEndTime = EndTime;
00075 }
00076
00077 void
00078 NIVisumTL::TimePeriod::SetStartTime(SUMOTime StartTime) {
00079 myStartTime = StartTime;
00080 }
00081
00082
00083
00084
00085
00086 NIVisumTL::Phase::Phase()
00087 : NIVisumTL::TimePeriod() {}
00088
00089 NIVisumTL::Phase::Phase(SUMOTime StartTime, SUMOTime EndTime)
00090 : NIVisumTL::TimePeriod(StartTime, EndTime) {}
00091
00092 NIVisumTL::Phase::~Phase() {}
00093
00094
00095
00096
00097 NIVisumTL::SignalGroup::SignalGroup(const std::string &Name,
00098 SUMOTime StartTime, SUMOTime EndTime)
00099 : NIVisumTL::TimePeriod(StartTime, EndTime), myName(Name) {}
00100
00101
00102 NIVisumTL::SignalGroup::~SignalGroup() {}
00103
00104 std::string NIVisumTL::SignalGroup::GetName() {
00105 return myName;
00106 }
00107
00108
00109 NBConnectionVector*
00110 NIVisumTL::SignalGroup::GetConnections() {
00111 return &myConnections;
00112 }
00113
00114
00115 NIVisumTL::PhaseMap*
00116 NIVisumTL::SignalGroup::GetPhases() {
00117 return &myPhases;
00118 }
00119
00120
00121
00122
00123
00124 NIVisumTL::NIVisumTL() {}
00125
00126
00127 NIVisumTL::NIVisumTL(const std::string &Name, SUMOTime CycleTime,
00128 SUMOTime IntermediateTime, bool PhaseDefined)
00129 : myName(Name), myCycleTime(CycleTime), myIntermediateTime(IntermediateTime),
00130 myPhaseDefined(PhaseDefined) {}
00131
00132 NIVisumTL::~NIVisumTL() {
00133 for (NIVisumTL::PhaseMap::iterator i=myPhases.begin();
00134 i!=myPhases.end(); i++) {
00135 delete(i->second);
00136 }
00137 for (NIVisumTL::SignalGroupMap::iterator k=mySignalGroups.begin();
00138 k!=mySignalGroups.end(); k++) {
00139 delete(k->second);
00140 }
00141 }
00142
00143 SUMOTime
00144 NIVisumTL::GetCycleTime() {
00145 return myCycleTime;
00146 }
00147
00148 SUMOTime
00149 NIVisumTL::GetIntermediateTime() {
00150 return myIntermediateTime;
00151 }
00152
00153 bool
00154 NIVisumTL::GetPhaseDefined() {
00155 return myPhaseDefined;
00156 }
00157
00158 NIVisumTL::NodeVector*
00159 NIVisumTL::GetNodes() {
00160 return &myNodes;
00161 }
00162
00163
00164 NIVisumTL::PhaseMap*
00165 NIVisumTL::GetPhases() {
00166 return &myPhases;
00167 }
00168
00169 NIVisumTL::SignalGroupMap* NIVisumTL::GetSignalGroups() {
00170 return &mySignalGroups;
00171 }
00172
00173 void NIVisumTL::SetCycleTime(SUMOTime CycleTime) {
00174 myCycleTime = CycleTime;
00175 }
00176
00177 void NIVisumTL::SetIntermediateTime(SUMOTime IntermediateTime) {
00178 myIntermediateTime = IntermediateTime;
00179 }
00180
00181 void NIVisumTL::SetPhaseDefined(bool PhaseDefined) {
00182 myPhaseDefined = PhaseDefined;
00183 }
00184
00185 void NIVisumTL::AddSignalGroup(const std::string Name, SUMOTime StartTime, SUMOTime EndTime) {
00186 mySignalGroups[Name] = new NIVisumTL::SignalGroup(Name, StartTime, EndTime);
00187 }
00188
00189 void NIVisumTL::AddPhase(const std::string Name, SUMOTime StartTime, SUMOTime EndTime) {
00190 myPhases[Name] = new NIVisumTL::Phase(StartTime, EndTime);
00191 }
00192
00193 NIVisumTL::SignalGroup* NIVisumTL::GetSignalGroup(const std::string Name) {
00194 return (*mySignalGroups.find(Name)).second;
00195 }
00196
00197 void
00198 NIVisumTL::build(NBTrafficLightLogicCont &tlc) {
00199 for (NodeVector::iterator ni = myNodes.begin(); ni != myNodes.end(); ni++) {
00200 NBNode *Node = (*ni);
00201 NBLoadedTLDef *def = new NBLoadedTLDef(Node->getID(), Node);
00202 tlc.insert(def);
00203 def->setCycleDuration((unsigned int) myCycleTime);
00204
00205 for (SignalGroupMap::iterator gi = mySignalGroups.begin(); gi != mySignalGroups.end(); gi++) {
00206 std::string GroupName = (*gi).first;
00207 NIVisumTL::SignalGroup &SG = *(*gi).second;
00208 def->addSignalGroup(GroupName);
00209 def->addToSignalGroup(GroupName, *SG.GetConnections());
00210 def->setSignalYellowTimes(GroupName, myIntermediateTime, myIntermediateTime);
00211
00212 if (myPhaseDefined) {
00213 for (PhaseMap::iterator pi = SG.GetPhases()->begin(); pi!= SG.GetPhases()->end(); pi++) {
00214 NIVisumTL::Phase &PH = *(*pi).second;
00215 def->addSignalGroupPhaseBegin(GroupName, PH.GetStartTime(), NBTrafficLightDefinition::TLCOLOR_GREEN);
00216 def->addSignalGroupPhaseBegin(GroupName, PH.GetEndTime(), NBTrafficLightDefinition::TLCOLOR_RED);
00217 };
00218 } else {
00219 def->addSignalGroupPhaseBegin(GroupName, SG.GetStartTime(), NBTrafficLightDefinition::TLCOLOR_GREEN);
00220 def->addSignalGroupPhaseBegin(GroupName, SG.GetEndTime(), NBTrafficLightDefinition::TLCOLOR_RED);
00221 }
00222 }
00223 }
00224 }
00225
00226
00227
00228
00229