103 template<
typename ParentType>
106 parents.push_back(parent);
111 template<
typename ParentType>
117 template<
typename ChildType>
128 template<
typename ElementType,
typename ParentType>
129 static void insertParent(ElementType* element, ParentType* parent,
const int index = -1) {
130 element->myHierarchicalStructureParents.add(parent, index);
131 parent->myHierarchicalStructureChildren.add(element);
129 static void insertParent(ElementType* element, ParentType* parent,
const int index = -1) {
…}
135 template<
typename ElementType,
typename ParentType>
137 element->myHierarchicalStructureParents.remove(parent);
138 parent->myHierarchicalStructureChildren.remove(element);
142 template<
typename ElementType,
typename ParentType>
143 static void updateParent(ElementType element,
const int index, ParentType newParent) {
145 auto oldParent = element->myHierarchicalStructureParents.template at<ParentType>(index);
146 oldParent->myHierarchicalStructureChildren.remove(element);
148 element->myHierarchicalStructureParents.replaceSingle(index, newParent);
150 newParent->myHierarchicalStructureChildren.add(element);
143 static void updateParent(ElementType element,
const int index, ParentType newParent) {
…}
154 template<
typename ElementType,
typename ParentType>
157 for (
const auto parent : element->myHierarchicalStructureParents.template get<ParentType>()) {
158 parent->myHierarchicalStructureChildren.remove(element);
161 element->myHierarchicalStructureParents.replaceAll(newParents);
163 for (
const auto parent : element->myHierarchicalStructureParents.template get<ParentType>()) {
164 parent->myHierarchicalStructureChildren.add(element);
169 template<
typename ElementType,
typename ChildType>
171 element->myHierarchicalStructureChildren.add(child);
172 child->myHierarchicalStructureParents.add(element);
176 template<
typename ElementType,
typename ChildType>
178 element->myHierarchicalStructureChildren.remove(child);
179 child->myHierarchicalStructureParents.remove(element);
183 template<
typename ElementType,
typename ChildType>
186 for (
const auto children : element->myHierarchicalStructureChildren.template get<ChildType>()) {
187 children->myHierarchicalStructureParents.remove(element);
190 element->myHierarchicalStructureChildren.replaceAll(newChildren);
192 for (
const auto children : element->myHierarchicalStructureChildren.template get<ChildType>()) {
193 children->myHierarchicalStructureParents.add(element);
std::set< ChildType > GNEHierarchicalContainerChildrenSet
std::vector< ChildType > GNEHierarchicalContainerChildren
std::vector< ParentType > GNEHierarchicalContainerParents
const GNEHierarchicalContainerChildren< GNEEdge * > & getChildEdges() const
get child edges
GNEHierarchicalStructureChildren myHierarchicalStructureChildren
hierarchical structure with children
const GNEHierarchicalContainerParents< GNEAdditional * > & getParentAdditionals() const
get parent additionals
const GNEHierarchicalContainerParents< GNEDemandElement * > & getParentDemandElements() const
get parent demand elements
const GNEHierarchicalContainerParents< GNEEdge * > & getParentEdges() const
get parent edges
const GNEHierarchicalContainerChildren< GNEGenericData * > & getChildGenericDatas() const
return child generic data elements
static void updateChildren(ElementType element, GNEHierarchicalContainerChildren< ChildType > newChildren)
update all children elements
GNEHierarchicalElement()
default Constructor
const GNEHierarchicalContainerChildren< GNELane * > & getChildLanes() const
get child lanes
const GNEHierarchicalContainerParents< GNEGenericData * > & getParentGenericDatas() const
get parent demand elements
static void insertChild(ElementType element, ChildType child)
insert child element
~GNEHierarchicalElement()
Destructor.
const GNEHierarchicalContainerChildren< GNEAdditional * > & getChildAdditionals() const
return child additionals
bool checkChildAdditionalsOverlapping() const
check if children are overlapped (Used by Rerouters)
const GNEHierarchicalContainerChildrenSet< GNETAZSourceSink * > & getChildTAZSourceSinks() const
return child TAZSourceSinks (Set)
void addChildElement(ChildType *element)
add child without updating parent (ONLY used if we're creating elements without undo-redo)
bool checkChildDemandElementsOverlapping() const
check if child demand elements are overlapped
const GNEHierarchicalContainerChildren< GNEJunction * > & getChildJunctions() const
get child junctions
GNEHierarchicalStructureParents myHierarchicalStructureParents
hierarchical structure with parents
void setParent(ParentType parent)
edit parent and childrens without maintain integrity (use carefully)
const GNEHierarchicalContainerParents< GNEJunction * > & getParentJunctions() const
get parent junctions
static void removeChild(ElementType element, ChildType child)
remove child element
static void insertParent(ElementType *element, ParentType *parent, const int index=-1)
insert parent element
const GNEHierarchicalContainerParents< GNELane * > & getParentLanes() const
get parent lanes
const GNEHierarchicalStructureParents getParents() const
get parents(used in GNE_Change)
const GNEHierarchicalContainerParents< GNEAdditional * > getParentStoppingPlaces() const
get parent stoppingPlaces (used by plans)
static void updateParent(ElementType element, const int index, ParentType newParent)
update single parent element
const GNEHierarchicalContainerChildren< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
std::string getNewListOfParents(const GNENetworkElement *currentElement, const GNENetworkElement *newNextElement) const
if use edge/parent lanes as a list of consecutive elements, obtain a list of IDs of elements after in...
GNEHierarchicalElement(const GNEHierarchicalElement &)=delete
Invalidated copy constructor.
void clearParents()
clear hierarchical structure parents (used in GNE_Change)
static void removeParent(ElementType *element, ParentType *parent)
remove parent element
static void updateParents(ElementType element, GNEHierarchicalContainerParents< ParentType > newParents)
update all parent elements
void setParents(const GNEHierarchicalContainerParents< ParentType > &parents)
set multiple parent element (ONLY use in constructors)
const GNEHierarchicalContainerParents< GNEAdditional * > getParentTAZs() const
get parent TAZs (used by plans)
Hierarchical structure used for keep children.
void add(ChildType child)
add child element
Hierarchical structure used for keep parents.
void replaceAll(const GNEHierarchicalContainerParents< ParentType > &newParents)
update all parent element