Skip to content

Commit

Permalink
Updated GNENetHelper::AttributeCarriers. Refs #13894
Browse files Browse the repository at this point in the history
  • Loading branch information
palvarezlopez committed Dec 19, 2023
1 parent 92ddb49 commit 94a9bb7
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 38 deletions.
59 changes: 35 additions & 24 deletions src/netedit/GNENetHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ GNENetHelper::AttributeCarriers::AttributeCarriers(GNENet* net) :
// fill meanDatas with tags
auto meanDataTags = GNEAttributeCarrier::getTagPropertiesByType(GNETagProperties::TagType::MEANDATA);
for (const auto& meanDataTag : meanDataTags) {
myMeanDatas.insert(std::make_pair(meanDataTag.getTag(), std::map<const GUIGlObject*, GNEMeanData*>()));
myMeanDatas.insert(std::make_pair(meanDataTag.getTag(), std::map<const std::string, GNEMeanData*>()));
}
}

Expand Down Expand Up @@ -1941,7 +1941,7 @@ GNENetHelper::AttributeCarriers::retrieveDataSet(const std::string& id, bool har
}


const std::map<const GUIGlObject*, GNEDataSet*>&
const std::map<const std::string, GNEDataSet*>&
GNENetHelper::AttributeCarriers::getDataSets() const {
return myDataSets;
}
Expand All @@ -1959,9 +1959,9 @@ GNENetHelper::AttributeCarriers::generateDataSetID(const std::string& prefix) co


GNEDataInterval*
GNENetHelper::AttributeCarriers::retrieveDataInterval(const GUIGlObject* glObject, bool hardFail) const {
if (myDataIntervals.count(glObject)) {
return myDataIntervals.at(glObject);
GNENetHelper::AttributeCarriers::retrieveDataInterval(const GNEAttributeCarrier *AC, bool hardFail) const {
if (myDataIntervals.count(AC)) {
return myDataIntervals.at(AC);
} else if (hardFail) {
throw ProcessError("Attempted to retrieve non-existant data interval");
} else {
Expand All @@ -1970,18 +1970,29 @@ GNENetHelper::AttributeCarriers::retrieveDataInterval(const GUIGlObject* glObjec
}


const std::map<const GUIGlObject*, GNEDataInterval*>&
bool
GNENetHelper::AttributeCarriers::dataIntervalExist(GNEDataInterval* dataInterval) const {
// first check that interval pointer is valid
if (dataInterval) {
return (myDataIntervals.count(dataInterval) > 0);
} else {
throw ProcessError("Invalid data interval pointer");
}
}


const std::map<const GNEAttributeCarrier*, GNEDataInterval*>&
GNENetHelper::AttributeCarriers::getDataIntervals() const {
return myDataIntervals;
}


void
GNENetHelper::AttributeCarriers::insertDataInterval(GNEDataInterval* dataInterval) {
if (myDataIntervals.count(dataInterval->getGUIGlObject()) > 0) {
GNENetHelper::AttributeCarriers::insertDataInterval(const GNEAttributeCarrier *AC, GNEDataInterval* dataInterval) {
if (myDataIntervals.count(AC) > 0) {
throw ProcessError(dataInterval->getTagStr() + " with ID='" + dataInterval->getID() + "' already exist");
} else {
myDataIntervals[dataInterval->getGUIGlObject()] = dataInterval;
myDataIntervals[AC] = dataInterval;
}
// mark interval toolbar for update
myNet->getViewNet()->getIntervalBar().markForUpdate();
Expand All @@ -1990,7 +2001,7 @@ GNENetHelper::AttributeCarriers::insertDataInterval(GNEDataInterval* dataInterva

void
GNENetHelper::AttributeCarriers::deleteDataInterval(GNEDataInterval* dataInterval) {
const auto finder = myDataIntervals.find(dataInterval->getGUIGlObject());
const auto finder = myDataIntervals.find(dataInterval);
if (finder == myDataIntervals.end()) {
throw ProcessError(dataInterval->getTagStr() + " with ID='" + dataInterval->getID() + "' wasn't previously inserted");
} else {
Expand Down Expand Up @@ -2253,7 +2264,7 @@ GNENetHelper::AttributeCarriers::retrieveMeanData(SumoXMLTag type, const std::st
}


const std::map<SumoXMLTag, std::map<const GUIGlObject*, GNEMeanData*> >&
const std::map<SumoXMLTag, std::map<const std::string, GNEMeanData*> >&
GNENetHelper::AttributeCarriers::getMeanDatas() const {
return myMeanDatas;
}
Expand Down Expand Up @@ -2421,10 +2432,10 @@ GNENetHelper::AttributeCarriers::additionalExist(const GNEAdditional* additional

void
GNENetHelper::AttributeCarriers::insertAdditional(GNEAdditional* additional) {
// insert additional
auto pair = std::make_pair(additional->getGUIGlObject(), additional);
if (myAdditionals.at(additional->getTagProperty().getTag()).insert(pair).second == false) {
if (myAdditionals.at(additional->getTagProperty().getTag()).count(additional) > 0) {
throw ProcessError(additional->getTagStr() + " with ID='" + additional->getID() + "' already exist");
} else {
myAdditionals.at(additional->getTagProperty().getTag())[additional->getGUIGlObject()] = additional;
}
// add element in grid
if (additional->getTagProperty().isPlacedInRTree()) {
Expand Down Expand Up @@ -2482,10 +2493,10 @@ GNENetHelper::AttributeCarriers::demandElementExist(GNEDemandElement* demandElem

void
GNENetHelper::AttributeCarriers::insertDemandElement(GNEDemandElement* demandElement) {
// insert in demandElements container
auto pair = std::make_pair(demandElement->getGUIGlObject(), demandElement);
if (myDemandElements.at(demandElement->getTagProperty().getTag()).insert(pair).second == false) {
if (myDemandElements.at(demandElement->getTagProperty().getTag()).count(demandElement) > 0) {
throw ProcessError(demandElement->getTagStr() + " with ID='" + demandElement->getID() + "' already exist");
} else {
myDemandElements.at(demandElement->getTagProperty().getTag())[demandElement->getGUIGlObject()] = demandElement;
}
// add element in grid
myNet->addGLObjectIntoGrid(demandElement);
Expand Down Expand Up @@ -2540,7 +2551,7 @@ bool
GNENetHelper::AttributeCarriers::dataSetExist(GNEDataSet* dataSet) const {
// first check that dataSet pointer is valid
if (dataSet) {
return (myDataSets.count(dataSet->getGUIGlObject()) > 0);
return (myDataSets.count(dataSet->getID()) > 0);
} else {
throw ProcessError("Invalid dataSet pointer");
}
Expand All @@ -2549,10 +2560,10 @@ GNENetHelper::AttributeCarriers::dataSetExist(GNEDataSet* dataSet) const {

void
GNENetHelper::AttributeCarriers::insertDataSet(GNEDataSet* dataSet) {
if (myDataSets.count(dataSet->getGUIGlObject()) > 0) {
if (myDataSets.count(dataSet->getID()) > 0) {
throw ProcessError(dataSet->getTagStr() + " with ID='" + dataSet->getID() + "' already exist");
} else {
myDataSets[dataSet->getGUIGlObject()] = dataSet;
myDataSets[dataSet->getID()] = dataSet;
}
// dataSets has to be saved
myNet->getSavingStatus()->requireSaveDataElements();
Expand All @@ -2563,7 +2574,7 @@ GNENetHelper::AttributeCarriers::insertDataSet(GNEDataSet* dataSet) {

void
GNENetHelper::AttributeCarriers::deleteDataSet(GNEDataSet* dataSet) {
const auto finder = myDataSets.find(dataSet->getGUIGlObject());
const auto finder = myDataSets.find(dataSet->getID());
if (finder == myDataSets.end()) {
throw ProcessError(dataSet->getTagStr() + " with ID='" + dataSet->getID() + "' wasn't previously inserted");
} else {
Expand Down Expand Up @@ -2598,10 +2609,10 @@ GNENetHelper::AttributeCarriers::meanDataExist(const GNEMeanData* meanData) cons

void
GNENetHelper::AttributeCarriers::insertMeanData(GNEMeanData* meanData) {
if (myMeanDatas.at(meanData->getTagProperty().getTag()).count(meanData->getGUIGlObject()) > 0) {
if (myMeanDatas.at(meanData->getTagProperty().getTag()).count(meanData->getID()) > 0) {
throw ProcessError(meanData->getTagStr() + " with ID='" + meanData->getID() + "' already exist");
} else {
myMeanDatas.at(meanData->getTagProperty().getTag()).insert(std::make_pair(meanData->getGUIGlObject(), meanData));
myMeanDatas.at(meanData->getTagProperty().getTag()).insert(std::make_pair(meanData->getID(), meanData));
}
// meanDatas has to be saved
myNet->getSavingStatus()->requireSaveMeanDatas();
Expand All @@ -2611,7 +2622,7 @@ GNENetHelper::AttributeCarriers::insertMeanData(GNEMeanData* meanData) {
void
GNENetHelper::AttributeCarriers::deleteMeanData(GNEMeanData* meanData) {
// find demanElement in meanDataTag
auto itFind = myMeanDatas.at(meanData->getTagProperty().getTag()).find(meanData->getGUIGlObject());
auto itFind = myMeanDatas.at(meanData->getTagProperty().getTag()).find(meanData->getID());
// check if meanData was previously inserted
if (itFind == myMeanDatas.at(meanData->getTagProperty().getTag()).end()) {
throw ProcessError(meanData->getTagStr() + " with ID='" + meanData->getID() + "' wasn't previously inserted");
Expand Down
21 changes: 12 additions & 9 deletions src/netedit/GNENetHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ struct GNENetHelper {
GNEDataSet* retrieveDataSet(const std::string& id, bool hardFail = true) const;

/// @brief get demand elements
const std::map<const GUIGlObject*, GNEDataSet*>& getDataSets() const;
const std::map<const std::string, GNEDataSet*>& getDataSets() const;

/// @brief generate data set id
std::string generateDataSetID(const std::string& prefix) const;
Expand All @@ -539,13 +539,16 @@ struct GNENetHelper {
* @param[in] id The attribute carrier related with the dataInterval element
* @param[in] hardFail Whether attempts to retrieve a nonexisting data set should result in an exception
*/
GNEDataInterval* retrieveDataInterval(const GUIGlObject* glObject, bool hardFail = true) const;
GNEDataInterval* retrieveDataInterval(const GNEAttributeCarrier *AC, bool hardFail = true) const;

/// @brief return true if given data interval exist
bool dataIntervalExist(GNEDataInterval* dataInterval) const;

/// @brief get all data intervals of network
const std::map<const GUIGlObject*, GNEDataInterval*>& getDataIntervals() const;
const std::map<const GNEAttributeCarrier*, GNEDataInterval*>& getDataIntervals() const;

/// @brief insert data interval
void insertDataInterval(GNEDataInterval* dataInterval);
void insertDataInterval(const GNEAttributeCarrier *AC, GNEDataInterval* dataInterval);

/// @brief delete data interval
void deleteDataInterval(GNEDataInterval* dataInterval);
Expand Down Expand Up @@ -607,7 +610,7 @@ struct GNENetHelper {
GNEMeanData* retrieveMeanData(SumoXMLTag type, const std::string& id, bool hardFail = true) const;

/// @brief get meanDatas
const std::map<SumoXMLTag, std::map<const GUIGlObject*, GNEMeanData*> >& getMeanDatas() const;
const std::map<SumoXMLTag, std::map<const std::string, GNEMeanData*> >& getMeanDatas() const;

/// @brief get number of meanDatas
int getNumberOfMeanDatas() const;
Expand Down Expand Up @@ -763,17 +766,17 @@ struct GNENetHelper {
/// @brief map with the tag and pointer to demand elements of net
std::map<SumoXMLTag, std::map<const GUIGlObject*, GNEDemandElement*> > myDemandElements;

/// @brief set with the ID and pointer to all datasets of net
std::map<const GUIGlObject*, GNEDataSet*> myDataSets;
/// @brief map with the ID and pointer to all datasets of net
std::map<const std::string, GNEDataSet*> myDataSets;

/// @brief map with all data intervals of network
std::map<const GUIGlObject*, GNEDataInterval*> myDataIntervals;
std::map<const GNEAttributeCarrier*, GNEDataInterval*> myDataIntervals;

/// @brief map with the tag and pointer to all generic datas
std::map<SumoXMLTag, std::map<const GUIGlObject*, GNEGenericData*> > myGenericDatas;

/// @brief map with the tag and pointer to meanData elements of net
std::map<SumoXMLTag, std::map<const GUIGlObject*, GNEMeanData*> > myMeanDatas;
std::map<SumoXMLTag, std::map<const std::string, GNEMeanData*> > myMeanDatas;

/// @brief Invalidated copy constructor.
AttributeCarriers(const AttributeCarriers&) = delete;
Expand Down
2 changes: 1 addition & 1 deletion src/netedit/GNEViewNet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5201,7 +5201,7 @@ GNEViewNet::deleteDataAttributeCarriers(const std::vector<GNEAttributeCarrier*>
}
} else if (AC->getTagProperty().getTag() == SUMO_TAG_DATAINTERVAL) {
// get data interval (note: could be already removed if is a child, then hardfail=false)
GNEDataInterval* dataInterval = myNet->getAttributeCarriers()->retrieveDataInterval(AC->getGUIGlObject(), false);
GNEDataInterval* dataInterval = myNet->getAttributeCarriers()->retrieveDataInterval(AC, false);
// if exist, remove it
if (dataInterval) {
myNet->deleteDataInterval(dataInterval, myUndoList);
Expand Down
2 changes: 1 addition & 1 deletion src/netedit/changes/GNEChange_DataInterval.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ GNEChange_DataInterval::~GNEChange_DataInterval() {
myDataInterval->decRef("GNEChange_DataInterval");
if (myDataInterval->unreferenced() &&
myDataInterval->getNet()->getAttributeCarriers()->retrieveDataSet(myDataSetParent->getID(), false) &&
myDataInterval->getNet()->getAttributeCarriers()->retrieveDataInterval(myDataInterval->getGUIGlObject(), false)) {
myDataInterval->getNet()->getAttributeCarriers()->dataIntervalExist(myDataInterval)) {
// show extra information for tests
WRITE_DEBUG("Deleting unreferenced " + myDataInterval->getTagStr() + " [" +
myDataInterval->getAttribute(SUMO_ATTR_BEGIN) + ", " +
Expand Down
2 changes: 1 addition & 1 deletion src/netedit/changes/GNEChange_GenericData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ GNEChange_GenericData::~GNEChange_GenericData() {
assert(myGenericData);
myGenericData->decRef("GNEChange_GenericData");
if (myGenericData->unreferenced() &&
myGenericData->getNet()->getAttributeCarriers()->retrieveDataInterval(myDataIntervalParent->getGUIGlObject(), false) &&
myGenericData->getNet()->getAttributeCarriers()->dataIntervalExist(myDataIntervalParent) &&
myGenericData->getNet()->getAttributeCarriers()->retrieveGenericData(myGenericData, false)) {
// show extra information for tests
WRITE_DEBUG("Deleting unreferenced " + myGenericData->getTagStr());
Expand Down
2 changes: 1 addition & 1 deletion src/netedit/elements/data/GNEDataSet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ GNEDataSet::addDataIntervalChild(GNEDataInterval* dataInterval) {
// add data interval child
myDataIntervalChildren[dataInterval->getAttributeDouble(SUMO_ATTR_BEGIN)] = dataInterval;
// add reference in attributeCarriers
myNet->getAttributeCarriers()->insertDataInterval(dataInterval);
myNet->getAttributeCarriers()->insertDataInterval(dataInterval, dataInterval);
} else {
throw ProcessError(TL("DataInterval was already inserted"));
}
Expand Down
2 changes: 1 addition & 1 deletion src/netedit/frames/GNEElementTree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ GNEElementTree::createPopUpMenu(int X, int Y, GNEAttributeCarrier* clickedAC) {
myClickedAdditional = attributeCarriers->retrieveAdditionalGL(clickedAC->getGUIGlObject(), false);
myClickedDemandElement = attributeCarriers->retrieveDemandElementGL(clickedAC->getGUIGlObject(), false);
myClickedDataSet = attributeCarriers->retrieveDataSet(clickedAC->getID(), false);
myClickedDataInterval = attributeCarriers->retrieveDataInterval(clickedAC->getGUIGlObject(), false);
myClickedDataInterval = attributeCarriers->retrieveDataInterval(clickedAC, false);
myClickedGenericData = attributeCarriers->retrieveGenericData(clickedAC->getGUIGlObject(), false);
// create FXMenuPane
FXMenuPane* pane = new FXMenuPane(myTreeListDynamic->getFXWindow());
Expand Down

0 comments on commit 94a9bb7

Please sign in to comment.