Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/elements/GNEHierarchicalStructureChildren.h
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.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Feb 2025
17
///
18
// Structure for GNEHierarchicalElements centered in children
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include <vector>
24
#include <set>
25
26
// ===========================================================================
27
// template declarations
28
// ===========================================================================
29
30
template <typename ChildType>
31
using GNEHierarchicalContainerChildren = std::vector<ChildType>;
32
33
template <typename ChildType>
34
using GNEHierarchicalContainerChildrenSet = std::set<ChildType>;
35
36
// ===========================================================================
37
// class declarations
38
// ===========================================================================
39
40
class GNENetworkElement;
41
class GNEJunction;
42
class GNEEdge;
43
class GNELane;
44
class GNEAdditional;
45
class GNETAZSourceSink;
46
class GNEDemandElement;
47
class GNEGenericData;
48
class GNEHierarchicalElement;
49
50
// ===========================================================================
51
// class definitions
52
// ===========================================================================
53
54
/// @brief Hierarchical structure used for keep children
55
class GNEHierarchicalStructureChildren {
56
57
public:
58
/// @brief default constructor
59
GNEHierarchicalStructureChildren();
60
61
/// @brief get children
62
template<typename ChildType>
63
const GNEHierarchicalContainerChildren<ChildType>& get() const;
64
65
/// @brief get children (set)
66
template<typename ChildType>
67
const GNEHierarchicalContainerChildrenSet<ChildType>& getSet() const;
68
69
/// @brief add child element
70
template<typename ChildType>
71
void add(ChildType child);
72
73
/// @brief remove child element
74
template<typename ChildType>
75
void remove(ChildType child);
76
77
/// @brief update all children
78
template<typename ChildType>
79
void replaceAll(const GNEHierarchicalContainerChildren<ChildType>& children);
80
81
private:
82
/// @brief children junctions
83
GNEHierarchicalContainerChildren<GNEJunction*> myChildJunctions;
84
85
/// @brief children edges
86
GNEHierarchicalContainerChildren<GNEEdge*> myChildEdges;
87
88
/// @brief children lanes
89
GNEHierarchicalContainerChildren<GNELane*> myChildLanes;
90
91
/// @brief children additional elements
92
GNEHierarchicalContainerChildren<GNEAdditional*> myChildAdditionals;
93
94
/// @brief children demand elements
95
GNEHierarchicalContainerChildren<GNEDemandElement*> myChildDemandElements;
96
97
/// @brief children genericdata elements
98
GNEHierarchicalContainerChildren<GNEGenericData*> myChildGenericDatas;
99
100
/// @brief children TAZSourceSinks elements (set)
101
GNEHierarchicalContainerChildrenSet<GNETAZSourceSink*> myChildSourceSinks;
102
};
103
104