From 68fdfccdc238537fd46758bf0136921088c3459e 2017-09-07 09:33:14 From: Alexandre Leroux Date: 2017-09-07 09:33:14 Subject: [PATCH] Clones variable --- diff --git a/core/include/Variable/Variable.h b/core/include/Variable/Variable.h index d766027..5b731ab 100644 --- a/core/include/Variable/Variable.h +++ b/core/include/Variable/Variable.h @@ -28,6 +28,11 @@ public: explicit Variable(const QString &name, const SqpRange &dateTime, const QVariantHash &metadata = {}); + /// Copy ctor + explicit Variable(const Variable &other); + + std::shared_ptr clone() const; + QString name() const noexcept; void setName(const QString &name) noexcept; SqpRange range() const noexcept; diff --git a/core/src/Variable/Variable.cpp b/core/src/Variable/Variable.cpp index 2d56bbb..64874ba 100644 --- a/core/src/Variable/Variable.cpp +++ b/core/src/Variable/Variable.cpp @@ -20,6 +20,15 @@ struct Variable::VariablePrivate { { } + VariablePrivate(const VariablePrivate &other) + : m_Name{other.m_Name}, + m_Range{other.m_Range}, + m_Metadata{other.m_Metadata}, + m_DataSeries{other.m_DataSeries != nullptr ? other.m_DataSeries->clone() : nullptr}, + m_RealRange{other.m_RealRange} + { + } + void lockRead() { m_Lock.lockForRead(); } void lockWrite() { m_Lock.lockForWrite(); } void unlock() { m_Lock.unlock(); } @@ -67,6 +76,16 @@ Variable::Variable(const QString &name, const SqpRange &dateTime, const QVariant { } +Variable::Variable(const Variable &other) + : impl{spimpl::make_unique_impl(*other.impl)} +{ +} + +std::shared_ptr Variable::clone() const +{ + return std::make_shared(*this); +} + QString Variable::name() const noexcept { impl->lockRead(); diff --git a/core/src/Variable/VariableController.cpp b/core/src/Variable/VariableController.cpp index c13c5d8..4b3293b 100644 --- a/core/src/Variable/VariableController.cpp +++ b/core/src/Variable/VariableController.cpp @@ -191,6 +191,10 @@ void VariableController::setTimeController(TimeController *timeController) noexc std::shared_ptr VariableController::cloneVariable(std::shared_ptr variable) noexcept { + // Clones variable + auto duplicate = variable->clone(); + + return duplicate; } void VariableController::deleteVariable(std::shared_ptr variable) noexcept