From 3df83a13b4d4e266ac705baccfe89fbc71ed6909 Mon Sep 17 00:00:00 2001 From: maelstrom Date: Tue, 1 Oct 2024 22:59:47 +0200 Subject: [PATCH] This might could work?? --- src/datamodel/instance.cpp | 10 +++++----- src/datamodel/instance.h | 5 ++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/datamodel/instance.cpp b/src/datamodel/instance.cpp index 7b5b5ea..755a79d 100644 --- a/src/datamodel/instance.cpp +++ b/src/datamodel/instance.cpp @@ -31,15 +31,15 @@ std::vector> Instance::GetChildren() { return this->children; } -Instance Instance::CloneInternal() { +std::unique_ptr Instance::CloneInternal() { // TODO: Implement refs - Instance clone = *this; - clone.children = std::vector>(); - clone.children.reserve(this->children.size()); + std::unique_ptr clone = this->copy(); + clone->children = std::vector>(); + clone->children.reserve(this->children.size()); for (std::shared_ptr child : this->children) { - clone.children.push_back(std::make_shared(child->CloneInternal())); + clone->children.push_back(std::make_shared(child->CloneInternal())); } return clone; diff --git a/src/datamodel/instance.h b/src/datamodel/instance.h index 7175f85..2ae4199 100644 --- a/src/datamodel/instance.h +++ b/src/datamodel/instance.h @@ -4,6 +4,8 @@ #include #include +#define INSTANCE_COPY_IMPL(CLASS_NAME) std::unique_ptr CLASS_NAME::copy() { return std::make_unique(CLASS_NAME(*this)); } + // The base class for all objects in the data model class Instance : std::enable_shared_from_this { private: @@ -16,5 +18,6 @@ public: std::vector> GetChildren(); virtual void Init(); - Instance CloneInternal(); + std::unique_ptr CloneInternal(); + virtual std::unique_ptr copy() const = 0; }; \ No newline at end of file