Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netimport/NIVisumTL.h
169667 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file NIVisumTL.h
15
/// @author Daniel Krajzewicz
16
/// @date Wed, 07 May 2003
17
///
18
// Intermediate class for storing visum traffic lights during their import
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include <vector>
24
#include <map>
25
#include <string>
26
#include <netbuild/NBConnectionDefs.h>
27
#include <netbuild/NBNodeCont.h>
28
#include <utils/common/SUMOTime.h>
29
30
class NBTrafficLightLogicCont;
31
class NBEdgeCont;
32
33
34
// ===========================================================================
35
// class declaration
36
// ===========================================================================
37
/**
38
* @class NIVisumTL
39
* @brief Intermediate class for storing visum traffic lights during their import
40
*/
41
class NIVisumTL {
42
public:
43
/** @class TimePeriod
44
* @brief A time period with a start and an end time
45
*/
46
class TimePeriod {
47
public:
48
/// @brief Constructor
49
TimePeriod(SUMOTime startTime, SUMOTime endTime, SUMOTime yellowTime)
50
: myStartTime(startTime), myEndTime(endTime), myYellowTime(yellowTime) {}
51
52
/// @brief Destructor
53
~TimePeriod() {}
54
55
/// @brief Returns the stored start time
56
SUMOTime getStartTime() {
57
return myStartTime;
58
}
59
60
/// @brief Returns the stored end time
61
SUMOTime getEndTime() {
62
return myEndTime;
63
}
64
65
/// @brief Returns the stored yellow time
66
SUMOTime getYellowTime() {
67
return myYellowTime;
68
}
69
70
private:
71
/// @brief Start time
72
const SUMOTime myStartTime;
73
/// @brief End time
74
const SUMOTime myEndTime;
75
/// @brief Yellow time
76
const SUMOTime myYellowTime;
77
78
private:
79
/// @brief Invalidated assignment operator
80
TimePeriod& operator=(const TimePeriod& s) = delete;
81
};
82
83
84
85
/** @class Phase
86
* @brief A phase
87
*/
88
class Phase : public TimePeriod {
89
public:
90
/// @brief Constructor
91
Phase(SUMOTime startTime, SUMOTime endTime, SUMOTime yellowTime) : NIVisumTL::TimePeriod(startTime, endTime, yellowTime) {}
92
93
/// @brief Destructor
94
~Phase() {}
95
96
};
97
98
99
100
/** @class SignalGroup
101
* @brief A signal group can be defined either by a time period or by phases
102
*/
103
class SignalGroup : public TimePeriod {
104
public:
105
/// @brief constructor
106
SignalGroup(const std::string& name, SUMOTime startTime, SUMOTime endTime, SUMOTime yellowTime)
107
: NIVisumTL::TimePeriod(startTime, endTime, yellowTime), myName(name) {}
108
109
/// @brief destructor
110
~SignalGroup() {}
111
112
/// @brief Returns the connections vector
113
NBConnectionVector& connections() {
114
return myConnections;
115
}
116
117
/// @brief Returns the phases map
118
std::map<std::string, Phase*>& phases() {
119
return myPhases;
120
}
121
122
private:
123
/// @brief Connections
124
NBConnectionVector myConnections;
125
/// @brief phases
126
std::map<std::string, Phase*> myPhases;
127
/// @brief name
128
std::string myName;
129
};
130
131
132
133
public:
134
/** @brief Constructor
135
* @param[in] name The name of the TLS
136
* @param[in] cycleTime The cycle time of the TLS
137
* @param[in] offset Seconds to skip
138
* @param[in] intermediateTime The name of the TLS
139
* @param[in] phaseDefined Whether phases are defined
140
*/
141
NIVisumTL(const std::string& name, SUMOTime cycleTime, SUMOTime offset, SUMOTime intermediateTime,
142
bool phaseDefined);
143
144
/// @brief Destructor
145
~NIVisumTL();
146
147
/// @brief Adds a node to control
148
void addNode(NBNode* n) {
149
myNodes.push_back(n);
150
}
151
152
/// @brief Adds a signal group
153
void addSignalGroup(const std::string& name, SUMOTime startTime, SUMOTime endTime, SUMOTime yellowTime);
154
155
/// @brief Adds a phase
156
void addPhase(const std::string& name, SUMOTime startTime, SUMOTime endTime, SUMOTime yellowTime);
157
158
/// @brief Returns the map of named phases
159
std::map<std::string, Phase*>& getPhases() {
160
return myPhases;
161
}
162
163
/// @brief Returns the named signal group
164
SignalGroup& getSignalGroup(const std::string& name);
165
166
/// @brief build the traffic light and add it to the given container
167
void build(NBEdgeCont& ec, NBTrafficLightLogicCont& tlc);
168
169
private:
170
/// @brief The name of traffic light
171
std::string myName;
172
173
/// @brief The cycle time of traffic light in seconds
174
SUMOTime myCycleTime;
175
176
/// @brief The offset in the plan
177
SUMOTime myOffset;
178
179
/// @brief The all-red time (unused here)
180
SUMOTime myIntermediateTime;
181
182
/// @brief Toggles the usage either of phases or of time periods in signal groups
183
bool myPhaseDefined;
184
185
/// @brief Vector of nodes belonging to this traffic light
186
std::vector<NBNode*> myNodes;
187
188
/// @brief Map of used phases if phases defined
189
std::map<std::string, Phase*> myPhases;
190
191
/// @brief Map of used signal groups
192
std::map<std::string, SignalGroup*> mySignalGroups;
193
194
195
};
196
197