Skip to content

Commit

Permalink
Updated GNEHierarchicalStructure. Refs #16039
Browse files Browse the repository at this point in the history
  • Loading branch information
palvarezlopez committed Jan 21, 2025
1 parent 3ee7a6d commit 831209b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/netedit/elements/GNEHierarchicalContainerChildrenHash.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ class GNEHierarchicalContainerChildrenHash : public std::unordered_set<T> {

public:
/// @brief default constructor
GNEHierarchicalContainerChildren() {
GNEHierarchicalContainerChildrenHash() {
}

/// @brief parameter constructor
GNEHierarchicalContainerChildren(const std::unordered_set<T>& elements) :
GNEHierarchicalContainerChildrenHash(const std::unordered_set<T>& elements) :
std::unordered_set<T>(elements) {
}
};
30 changes: 30 additions & 0 deletions src/netedit/elements/GNEHierarchicalStructure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include <netedit/elements/network/GNELane.h>
#include <netedit/elements/demand/GNEDemandElement.h>
#include <netedit/elements/additional/GNEAdditional.h>
#include <netedit/elements/additional/GNETAZSourceSink.h>
#include <netedit/elements/data/GNEGenericData.h>
#include <utils/common/UtilExceptions.h>

Expand Down Expand Up @@ -64,6 +65,7 @@ GNEHierarchicalStructure::getContainerSize() const {
myChildEdges.size() +
myChildLanes.size() +
myChildAdditionals.size() +
myChildSourceSinks.size() +
myChildDemandElements.size() +
myChildGenericDatas.size()
);
Expand Down Expand Up @@ -196,6 +198,12 @@ GNEHierarchicalStructure::addChildElement(GNEAdditional* additional) {
}


template <> void
GNEHierarchicalStructure::addChildElement(GNETAZSourceSink* TAZSourceSink) {
myChildSourceSinks.insert(TAZSourceSink);
}


template <> void
GNEHierarchicalStructure::addChildElement(GNEDemandElement* demandElement) {
myChildDemandElements.push_back(demandElement);
Expand Down Expand Up @@ -253,6 +261,16 @@ GNEHierarchicalStructure::removeChildElement(GNEAdditional* additional) {
}


template <> void
GNEHierarchicalStructure::removeChildElement(GNETAZSourceSink* TAZSourceSink) {
auto it = myChildSourceSinks.find(TAZSourceSink);
if (it != myChildSourceSinks.end()) {
myChildSourceSinks.erase(it);
} else {
throw ProcessError(TAZSourceSink->getTagStr() + " is not a child element");
}
}

template <> void
GNEHierarchicalStructure::removeChildElement(GNEDemandElement* demandElement) {
auto it = std::find(myChildDemandElements.begin(), myChildDemandElements.end(), demandElement);
Expand Down Expand Up @@ -371,6 +389,12 @@ GNEHierarchicalStructure::getChildren() const {
}


template<> const GNEHierarchicalContainerChildrenHash<GNETAZSourceSink*>&
GNEHierarchicalStructure::getChildrenHash() const {
return myChildSourceSinks;
}


template<> const GNEHierarchicalContainerChildren<GNEDemandElement*>&
GNEHierarchicalStructure::getChildren() const {
return myChildDemandElements;
Expand Down Expand Up @@ -407,6 +431,12 @@ GNEHierarchicalStructure::setChildren(const std::vector<GNEAdditional*>& newChil
}


template<> void
GNEHierarchicalStructure::setChildren(const std::unordered_set<GNETAZSourceSink*>& newChildren) {
myChildSourceSinks = newChildren;
}


template<> void
GNEHierarchicalStructure::setChildren(const std::vector<GNEDemandElement*>& newChildren) {
myChildDemandElements = newChildren;
Expand Down
17 changes: 15 additions & 2 deletions src/netedit/elements/GNEHierarchicalStructure.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

#include "GNEHierarchicalContainerParents.h"
#include "GNEHierarchicalContainerChildren.h"
#include "GNEHierarchicalContainerChildrenHash.h"

// ===========================================================================
// class declarations
Expand All @@ -34,6 +35,7 @@ class GNEJunction;
class GNEEdge;
class GNELane;
class GNEAdditional;
class GNETAZSourceSink;
class GNEDemandElement;
class GNEGenericData;
class GNEHierarchicalElement;
Expand Down Expand Up @@ -83,15 +85,23 @@ class GNEHierarchicalStructure {

/// @brief set parents
template<typename T>
void setParents(const T& newParents);
void setParents(const std::vector<T>& newParents);

/// @brief get children
template<typename T>
const GNEHierarchicalContainerChildren<T>& getChildren() const;

/// @brief get children (hash)
template<typename T>
const GNEHierarchicalContainerChildrenHash<T>& getChildrenHash() const;

/// @brief set children
template<typename T>
void setChildren(const T& newChildren);
void setChildren(const std::vector<T>& newChildren);

/// @brief set children (Hash)
template<typename T>
void setChildren(const std::unordered_set<T>& newChildren);

private:
/// @brief parents junctions
Expand Down Expand Up @@ -124,6 +134,9 @@ class GNEHierarchicalStructure {
/// @brief children additional elements
GNEHierarchicalContainerChildren<GNEAdditional*> myChildAdditionals;

/// @brief children additional elements
GNEHierarchicalContainerChildrenHash<GNETAZSourceSink*> myChildSourceSinks;

/// @brief children demand elements
GNEHierarchicalContainerChildren<GNEDemandElement*> myChildDemandElements;

Expand Down

0 comments on commit 831209b

Please sign in to comment.