NIVisumTL.cpp

Go to the documentation of this file.
00001 /****************************************************************************/
00007 // Intermediate class for storing visum traffic lights during their import
00008 /****************************************************************************/
00009 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
00010 // Copyright 2001-2010 DLR (http://www.dlr.de/) and contributors
00011 /****************************************************************************/
00012 //
00013 //   This program is free software; you can redistribute it and/or modify
00014 //   it under the terms of the GNU General Public License as published by
00015 //   the Free Software Foundation; either version 2 of the License, or
00016 //   (at your option) any later version.
00017 //
00018 /****************************************************************************/
00019 
00020 
00021 // ===========================================================================
00022 // included modules
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 // used namespaces
00041 // ===========================================================================
00042 using namespace std;
00043 
00044 // ===========================================================================
00045 // method definitions
00046 // ===========================================================================
00047 /* -------------------------------------------------------------------------
00048  * methods from NIVisumTL::TimePeriod
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  * methods from NIVisumTL::TimePeriod
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  * methods from NIVisumTL::SignalGroup
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 * methods from NIVisumTL
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         // signalgroups
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             // phases
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 

Generated on Wed May 5 00:06:34 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6