From f9b9dd8d45895517114ca5c74a33d89964bc6dd8 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Tue, 8 Nov 2022 12:06:44 +0100 Subject: [PATCH] FitParameterContainerItem and FitParameterItem: add OwningVector --- Base/Types/OwningVector.h | 2 +- GUI/Model/Job/FitParameterContainerItem.cpp | 8 +++----- GUI/Model/Job/FitParameterContainerItem.h | 5 +++-- GUI/Model/Job/FitParameterItem.cpp | 14 +++++--------- GUI/Model/Job/FitParameterItem.h | 3 ++- GUI/Support/XML/UtilXML.h | 17 +++++++++-------- 6 files changed, 23 insertions(+), 26 deletions(-) diff --git a/Base/Types/OwningVector.h b/Base/Types/OwningVector.h index 497d3d17c59..2191b83a532 100644 --- a/Base/Types/OwningVector.h +++ b/Base/Types/OwningVector.h @@ -67,7 +67,7 @@ public: return; for(size_t i=0; i<m_v.size(); i++) if(m_v[i] == e) { - delete m_v(i); + delete m_v[i]; m_v.erase(m_v.begin()+i); return; } diff --git a/GUI/Model/Job/FitParameterContainerItem.cpp b/GUI/Model/Job/FitParameterContainerItem.cpp index 25c31629513..401a829d12a 100644 --- a/GUI/Model/Job/FitParameterContainerItem.cpp +++ b/GUI/Model/Job/FitParameterContainerItem.cpp @@ -68,9 +68,7 @@ void FitParameterContainerItem::createFitParameter(ParameterItem* parameterItem) void FitParameterContainerItem::removeFitParameter(FitParameterItem* fitPar) { - m_fitParameterItems.delete_at(); - m_fitParameterItems.removeOne(fitPar); - + m_fitParameterItems.delete_element(fitPar); updateFitParameterNames(); } @@ -120,7 +118,7 @@ FitParameterContainerItem::fitParameterItem(const ParameterItem* parameterItem) QVector<FitParameterItem*> FitParameterContainerItem::fitParameterItems() const { - return m_fitParameterItems; + return QVector<FitParameterItem*>(m_fitParameterItems.begin(), m_fitParameterItems.end()); } QStringList FitParameterContainerItem::fitParameterNames() const @@ -141,7 +139,7 @@ void FitParameterContainerItem::removeLink(const ParameterItem* parameterItem) FitParameterItem* FitParameterContainerItem::createBareFitParameter() { FitParameterItem* fitPar = new FitParameterItem(this); - m_fitParameterItems.append(fitPar); + m_fitParameterItems.emplace_back(fitPar); updateFitParameterNames(); return fitPar; } diff --git a/GUI/Model/Job/FitParameterContainerItem.h b/GUI/Model/Job/FitParameterContainerItem.h index e714bf6c01f..ad6a3fd375e 100644 --- a/GUI/Model/Job/FitParameterContainerItem.h +++ b/GUI/Model/Job/FitParameterContainerItem.h @@ -15,6 +15,8 @@ #ifndef BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERCONTAINERITEM_H #define BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERCONTAINERITEM_H +#include "Base/Types/OwningVector.h" +#include "GUI/Model/Job/FitParameterItem.h" #include <QObject> namespace mumufit { @@ -22,7 +24,6 @@ namespace mumufit { class Parameters; } -class FitParameterItem; class ParameterItem; class QXmlStreamReader; class QXmlStreamWriter; @@ -77,7 +78,7 @@ signals: void fitItemChanged(); private: - QVector<FitParameterItem*> m_fitParameterItems; + OwningVector<FitParameterItem> m_fitParameterItems; }; #endif // BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERCONTAINERITEM_H diff --git a/GUI/Model/Job/FitParameterItem.cpp b/GUI/Model/Job/FitParameterItem.cpp index 12afcbdca46..da7db0b7c08 100644 --- a/GUI/Model/Job/FitParameterItem.cpp +++ b/GUI/Model/Job/FitParameterItem.cpp @@ -356,7 +356,7 @@ QObject* FitParameterItem::maximumItem() const void FitParameterItem::addLink(const QString& title, const QString& link) { FitParameterLinkItem* newLink = new FitParameterLinkItem(this); - m_links.append(newLink); + m_links.emplace_back(newLink); newLink->setTitle(title); newLink->setLink(link); @@ -364,18 +364,14 @@ void FitParameterItem::addLink(const QString& title, const QString& link) void FitParameterItem::removeLink(const QString& link) { - for (FitParameterLinkItem* linkItem : linkItems()) - if (linkItem->link() == link) { - if (linkItem) - delete linkItem; - if (m_links.contains(linkItem)) - m_links.removeOne(linkItem); - } + for (FitParameterLinkItem* linkItem : m_links) + if (linkItem->link() == link) + m_links.delete_element(linkItem); } QVector<FitParameterLinkItem*> FitParameterItem::linkItems() const { - return m_links; + return QVector<FitParameterLinkItem*>(m_links.begin(), m_links.end()); } QStringList FitParameterItem::links() const diff --git a/GUI/Model/Job/FitParameterItem.h b/GUI/Model/Job/FitParameterItem.h index f71ed0338f5..4ec654255ba 100644 --- a/GUI/Model/Job/FitParameterItem.h +++ b/GUI/Model/Job/FitParameterItem.h @@ -15,6 +15,7 @@ #ifndef BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERITEM_H #define BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERITEM_H +#include "Base/Types/OwningVector.h" #include "Fit/Param/AttLimits.h" #include "GUI/Util/ComboProperty.h" @@ -128,7 +129,7 @@ private: std::unique_ptr<FitDoubleItem> m_startValueItem; std::unique_ptr<FitEditableDoubleItem> m_minItem; std::unique_ptr<FitEditableDoubleItem> m_maxItem; - QVector<FitParameterLinkItem*> m_links; + OwningVector<FitParameterLinkItem> m_links; }; #endif // BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERITEM_H diff --git a/GUI/Support/XML/UtilXML.h b/GUI/Support/XML/UtilXML.h index f7ae9e45d2f..a11a6857385 100644 --- a/GUI/Support/XML/UtilXML.h +++ b/GUI/Support/XML/UtilXML.h @@ -19,6 +19,7 @@ #include <QXmlStreamWriter> // used in every including file #include <heinz/Complex.h> #include <heinz/Vectors3D.h> +#include "Base/Types/OwningVector.h" class QXmlStreamReader; class MessageService; @@ -105,27 +106,27 @@ void readVector(QXmlStreamReader* reader, const QString& tag, QVector<T>& vec) } } -//! Write vector of classes recursively +//! Write OwningVector of classes template <typename T> -void writeVectorClass(QXmlStreamWriter* writer, const QString& tag, const QVector<T*>& vec) +void writeVectorClass(QXmlStreamWriter* writer, const QString& tag, const OwningVector<T>& vec) { - for (int i = 0; i < vec.size(); i++) { + for (T* e : vec) { writer->writeStartElement(tag); - vec[i]->writeTo(writer); + e->writeTo(writer); writer->writeEndElement(); } } -//! Read vector of classes recursively +//! Read OwningVector of classes template <typename T, typename... Args> -void readVectorClass(QXmlStreamReader* reader, const QString& tag, QVector<T*>& vec, +void readVectorClass(QXmlStreamReader* reader, const QString& tag, OwningVector<T>& vec, Args... argsForConstructor) { vec.clear(); while (reader->readNextStartElement()) { if (reader->name() == tag) { - vec.push_back(new T(argsForConstructor...)); - vec.last()->readFrom(reader); + vec.emplace_back(new T(argsForConstructor...)); + vec.back()->readFrom(reader); GUI::Session::XML::gotoEndElementOfTag(reader, tag); } else { reader->skipCurrentElement(); -- GitLab