SUMO - Simulation of Urban MObility

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