From 2380d160a8de20f1532a0791c08e0d8606981766 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de>
Date: Thu, 13 Apr 2023 12:52:47 +0200
Subject: [PATCH] + Frame::clone

---
 Base/Axis/Frame.cpp                 |  5 +++++
 Base/Axis/Frame.h                   |  2 ++
 auto/Wrap/libBornAgainBase.py       |  4 ++++
 auto/Wrap/libBornAgainBase_wrap.cpp | 24 ++++++++++++++++++++++++
 4 files changed, 35 insertions(+)

diff --git a/Base/Axis/Frame.cpp b/Base/Axis/Frame.cpp
index 326e42ec9bb..07c71f8d2cc 100644
--- a/Base/Axis/Frame.cpp
+++ b/Base/Axis/Frame.cpp
@@ -27,6 +27,11 @@ Frame::Frame(const std::vector<const IAxis*>& axes)
     }
 }
 
+Frame* Frame::clone() const
+{
+    return new Frame(m_axes.cloned_vector());
+}
+
 Frame::~Frame() = default;
 
 size_t Frame::rank() const
diff --git a/Base/Axis/Frame.h b/Base/Axis/Frame.h
index db32044c652..9f17d6704e2 100644
--- a/Base/Axis/Frame.h
+++ b/Base/Axis/Frame.h
@@ -30,6 +30,8 @@ public:
     Frame(const std::vector<const IAxis*>& axes);
     virtual ~Frame();
 
+    Frame* clone() const;
+
     //! Returns number of dimensions.
     size_t rank() const;
 
diff --git a/auto/Wrap/libBornAgainBase.py b/auto/Wrap/libBornAgainBase.py
index 8a65b23e0c7..eaca1cf9373 100644
--- a/auto/Wrap/libBornAgainBase.py
+++ b/auto/Wrap/libBornAgainBase.py
@@ -2084,6 +2084,10 @@ class Frame(object):
         _libBornAgainBase.Frame_swiginit(self, _libBornAgainBase.new_Frame(axes))
     __swig_destroy__ = _libBornAgainBase.delete_Frame
 
+    def clone(self):
+        r"""clone(Frame self) -> Frame"""
+        return _libBornAgainBase.Frame_clone(self)
+
     def rank(self):
         r"""rank(Frame self) -> size_t"""
         return _libBornAgainBase.Frame_rank(self)
diff --git a/auto/Wrap/libBornAgainBase_wrap.cpp b/auto/Wrap/libBornAgainBase_wrap.cpp
index a913686cbb1..91f18e84660 100644
--- a/auto/Wrap/libBornAgainBase_wrap.cpp
+++ b/auto/Wrap/libBornAgainBase_wrap.cpp
@@ -27105,6 +27105,29 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_Frame_clone(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Frame *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_clone" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  result = (Frame *)((Frame const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Frame, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_Frame_rank(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   Frame *arg1 = (Frame *) 0 ;
@@ -29577,6 +29600,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "DiscreteAxis_swiginit", DiscreteAxis_swiginit, METH_VARARGS, NULL},
 	 { "new_Frame", _wrap_new_Frame, METH_O, "new_Frame(std::vector< IAxis const *,std::allocator< IAxis const * > > const & axes) -> Frame"},
 	 { "delete_Frame", _wrap_delete_Frame, METH_O, "delete_Frame(Frame self)"},
+	 { "Frame_clone", _wrap_Frame_clone, METH_O, "Frame_clone(Frame self) -> Frame"},
 	 { "Frame_rank", _wrap_Frame_rank, METH_O, "Frame_rank(Frame self) -> size_t"},
 	 { "Frame_size", _wrap_Frame_size, METH_O, "Frame_size(Frame self) -> size_t"},
 	 { "Frame_projectedSize", _wrap_Frame_projectedSize, METH_VARARGS, "Frame_projectedSize(Frame self, size_t k_axis) -> size_t"},
-- 
GitLab