Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/elements/GNEHierarchicalStructureChildren.cpp
169678 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 GNEHierarchicalStructureChildren.cpp
15
/// @author Pablo Alvarez Lopez
16
/// @date Feb 2025
17
///
18
// Structure for // Structure for GNEHierarchicalElements centered in children
19
/****************************************************************************/
20
21
#include <netedit/elements/network/GNEJunction.h>
22
#include <netedit/elements/network/GNEEdge.h>
23
#include <netedit/elements/network/GNELane.h>
24
#include <netedit/elements/demand/GNEDemandElement.h>
25
#include <netedit/elements/additional/GNEAdditional.h>
26
#include <netedit/elements/additional/GNETAZSourceSink.h>
27
#include <netedit/elements/data/GNEGenericData.h>
28
#include <utils/common/UtilExceptions.h>
29
30
#include "GNEHierarchicalStructureChildren.h"
31
32
// ===========================================================================
33
// member method definitions
34
// ===========================================================================
35
36
GNEHierarchicalStructureChildren::GNEHierarchicalStructureChildren() {}
37
38
// get functions
39
40
template<> const GNEHierarchicalContainerChildren<GNEJunction*>&
41
GNEHierarchicalStructureChildren::get() const {
42
return myChildJunctions;
43
}
44
45
46
template<> const GNEHierarchicalContainerChildren<GNEEdge*>&
47
GNEHierarchicalStructureChildren::get() const {
48
return myChildEdges;
49
}
50
51
52
template<> const GNEHierarchicalContainerChildren<GNELane*>&
53
GNEHierarchicalStructureChildren::get() const {
54
return myChildLanes;
55
}
56
57
58
template<> const GNEHierarchicalContainerChildren<GNEAdditional*>&
59
GNEHierarchicalStructureChildren::get() const {
60
return myChildAdditionals;
61
}
62
63
64
template<> const GNEHierarchicalContainerChildren<GNEDemandElement*>&
65
GNEHierarchicalStructureChildren::get() const {
66
return myChildDemandElements;
67
}
68
69
70
template<> const GNEHierarchicalContainerChildren<GNEGenericData*>&
71
GNEHierarchicalStructureChildren::get() const {
72
return myChildGenericDatas;
73
}
74
75
76
template<> const GNEHierarchicalContainerChildrenSet<GNETAZSourceSink*>&
77
GNEHierarchicalStructureChildren::getSet() const {
78
return myChildSourceSinks;
79
}
80
81
// add functions
82
83
template <> void
84
GNEHierarchicalStructureChildren::add(GNEJunction* child) {
85
myChildJunctions.push_back(child);
86
}
87
88
89
template <> void
90
GNEHierarchicalStructureChildren::add(GNEEdge* child) {
91
myChildEdges.push_back(child);
92
}
93
94
95
template <> void
96
GNEHierarchicalStructureChildren::add(GNELane* child) {
97
myChildLanes.push_back(child);
98
}
99
100
101
template <> void
102
GNEHierarchicalStructureChildren::add(GNEAdditional* child) {
103
myChildAdditionals.push_back(child);
104
}
105
106
107
template <> void
108
GNEHierarchicalStructureChildren::add(GNETAZSourceSink* child) {
109
myChildSourceSinks.insert(child);
110
}
111
112
113
template <> void
114
GNEHierarchicalStructureChildren::add(GNEDemandElement* child) {
115
myChildDemandElements.push_back(child);
116
}
117
118
119
template <> void
120
GNEHierarchicalStructureChildren::add(GNEGenericData* child) {
121
myChildGenericDatas.push_back(child);
122
}
123
124
// remove functions
125
126
template <> void
127
GNEHierarchicalStructureChildren::remove(GNEJunction* child) {
128
auto it = std::find(myChildJunctions.begin(), myChildJunctions.end(), child);
129
if (it != myChildJunctions.end()) {
130
myChildJunctions.erase(it);
131
} else {
132
throw ProcessError(child->getTagStr() + " is not a child element");
133
}
134
}
135
136
137
template <> void
138
GNEHierarchicalStructureChildren::remove(GNEEdge* child) {
139
auto it = std::find(myChildEdges.begin(), myChildEdges.end(), child);
140
if (it != myChildEdges.end()) {
141
myChildEdges.erase(it);
142
} else {
143
throw ProcessError(child->getTagStr() + " is not a child element");
144
}
145
}
146
147
148
template <> void
149
GNEHierarchicalStructureChildren::remove(GNELane* child) {
150
auto it = std::find(myChildLanes.begin(), myChildLanes.end(), child);
151
if (it != myChildLanes.end()) {
152
myChildLanes.erase(it);
153
} else {
154
throw ProcessError(child->getTagStr() + " is not a child element");
155
}
156
}
157
158
159
template <> void
160
GNEHierarchicalStructureChildren::remove(GNEAdditional* child) {
161
auto it = std::find(myChildAdditionals.begin(), myChildAdditionals.end(), child);
162
if (it != myChildAdditionals.end()) {
163
myChildAdditionals.erase(it);
164
} else {
165
throw ProcessError(child->getTagStr() + " is not a child element");
166
}
167
}
168
169
170
template <> void
171
GNEHierarchicalStructureChildren::remove(GNETAZSourceSink* child) {
172
auto it = myChildSourceSinks.find(child);
173
if (it != myChildSourceSinks.end()) {
174
myChildSourceSinks.erase(it);
175
} else {
176
throw ProcessError(child->getTagStr() + " is not a child element");
177
}
178
}
179
180
template <> void
181
GNEHierarchicalStructureChildren::remove(GNEDemandElement* child) {
182
auto it = std::find(myChildDemandElements.begin(), myChildDemandElements.end(), child);
183
if (it != myChildDemandElements.end()) {
184
myChildDemandElements.erase(it);
185
} else {
186
throw ProcessError(child->getTagStr() + " is not a child element");
187
}
188
}
189
190
191
template <> void
192
GNEHierarchicalStructureChildren::remove(GNEGenericData* child) {
193
auto it = std::find(myChildGenericDatas.begin(), myChildGenericDatas.end(), child);
194
if (it != myChildGenericDatas.end()) {
195
myChildGenericDatas.erase(it);
196
} else {
197
throw ProcessError(child->getTagStr() + " is not a child element");
198
}
199
}
200
201
// replaceAll functions
202
203
template <> void
204
GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEJunction*>& children) {
205
myChildJunctions = children;
206
}
207
208
209
template <> void
210
GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEEdge*>& children) {
211
myChildEdges = children;
212
}
213
214
215
template <> void
216
GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNELane*>& children) {
217
myChildLanes = children;
218
}
219
220
221
template <> void
222
GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEAdditional*>& children) {
223
myChildAdditionals = children;
224
}
225
226
227
template <> void
228
GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNETAZSourceSink*>& children) {
229
myChildSourceSinks.clear();
230
for (const auto child : children) {
231
myChildSourceSinks.insert(child);
232
}
233
}
234
235
236
template <> void
237
GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEDemandElement*>& children) {
238
myChildDemandElements = children;
239
}
240
241
242
template <> void
243
GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEGenericData*>& children) {
244
myChildGenericDatas = children;
245
}
246
247
/****************************************************************************/
248
249