From 28c91037f74badc95e29611b6b4d9b9b9129b13e Mon Sep 17 00:00:00 2001
From: Matthias Puchner <github@mpuchner.de>
Date: Sun, 2 May 2021 11:31:55 +0200
Subject: [PATCH] remove obsolete RealParameter.clone

---
 Param/Base/IParameter.h                       |   2 -
 Param/Base/RealParameter.cpp                  |   8 -
 Param/Base/RealParameter.h                    |   4 +-
 .../Core/Parameters/RealParameterTest.cpp     |  22 ---
 auto/Wrap/libBornAgainDevice.py               |  20 +++
 auto/Wrap/libBornAgainDevice_wrap.cpp         | 138 ++++++++++++++++++
 6 files changed, 160 insertions(+), 34 deletions(-)

diff --git a/Param/Base/IParameter.h b/Param/Base/IParameter.h
index 3dfc02d9015..f38048eb4a0 100644
--- a/Param/Base/IParameter.h
+++ b/Param/Base/IParameter.h
@@ -33,8 +33,6 @@ public:
                const std::function<void()>& onChange);
     virtual ~IParameter() = default;
 
-    virtual IParameter* clone(const std::string& new_name = "") const = 0;
-
     //! Returns true if wrapped parameter was not initialized with proper real value
     virtual bool isNull() const { return m_data ? false : true; }
 
diff --git a/Param/Base/RealParameter.cpp b/Param/Base/RealParameter.cpp
index 146b277c7bc..42442005c45 100644
--- a/Param/Base/RealParameter.cpp
+++ b/Param/Base/RealParameter.cpp
@@ -30,14 +30,6 @@ RealParameter::RealParameter(const std::string& name, double* par, const std::st
     }
 }
 
-RealParameter* RealParameter::clone(const std::string& new_name) const
-{
-    auto* ret = new RealParameter(new_name != "" ? new_name : getName(), m_data, m_parent_name,
-                                  m_onChange, m_limits);
-    ret->setUnit(unit());
-    return ret;
-}
-
 void RealParameter::setValue(double value)
 {
     if (value == *m_data)
diff --git a/Param/Base/RealParameter.h b/Param/Base/RealParameter.h
index 5b0cb1d0245..3718d40bfab 100644
--- a/Param/Base/RealParameter.h
+++ b/Param/Base/RealParameter.h
@@ -34,8 +34,6 @@ public:
                   const Attributes& attr = Attributes::free());
     virtual ~RealParameter() = default;
 
-    RealParameter* clone(const std::string& new_name = "") const;
-
     //! Sets value of wrapped parameter and emit signal
     void setValue(double value);
 
@@ -52,7 +50,9 @@ public:
     RealParameter& setUnit(const std::string& name);
     std::string unit() const;
 
+#ifndef SWIG
     static std::string asPythonArgumentList(const std::vector<RealParameter*>& parameters);
+#endif
 
 protected:
     RealLimits m_limits;
diff --git a/Tests/UnitTests/Core/Parameters/RealParameterTest.cpp b/Tests/UnitTests/Core/Parameters/RealParameterTest.cpp
index c23795bc494..641b9e2d1a3 100644
--- a/Tests/UnitTests/Core/Parameters/RealParameterTest.cpp
+++ b/Tests/UnitTests/Core/Parameters/RealParameterTest.cpp
@@ -50,25 +50,3 @@ TEST_F(RealParameterTest, extendedConstructor)
     EXPECT_EQ(par.value(), new_value);
 }
 
-TEST_F(RealParameterTest, clone)
-{
-    double value(42.0);
-    bool is_changed(false);
-    std::unique_ptr<RealParameter> par(new RealParameter(
-        "name", &value, "parent_name", [&]() { is_changed = true; }, RealLimits::limited(1.0, 43.0),
-        Attributes::free()));
-
-    // cloning and deleting original
-    std::unique_ptr<RealParameter> clone(par->clone());
-    par.reset();
-    EXPECT_EQ(clone->value(), value);
-    EXPECT_EQ(clone->limits(), RealLimits::limited(1.0, 43.0));
-
-    // checks
-    EXPECT_FALSE(is_changed);
-    const double new_value(41.0);
-    clone->setValue(new_value);
-    EXPECT_TRUE(is_changed);
-    EXPECT_EQ(clone->value(), new_value);
-    EXPECT_EQ(value, new_value);
-}
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index b508e4230f3..0aa3f2acd7f 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -2785,10 +2785,30 @@ class Beam(libBornAgainParam.INode):
         """
         return _libBornAgainDevice.Beam_footprintFactor(self)
 
+    def parameterWavelength(self):
+        r"""parameterWavelength(Beam self) -> RealParameter *"""
+        return _libBornAgainDevice.Beam_parameterWavelength(self)
+
+    def parameterAzimuthalAngle(self):
+        r"""parameterAzimuthalAngle(Beam self) -> RealParameter *"""
+        return _libBornAgainDevice.Beam_parameterAzimuthalAngle(self)
+
     def parameterInclinationAngle(self):
         r"""parameterInclinationAngle(Beam self) -> RealParameter *"""
         return _libBornAgainDevice.Beam_parameterInclinationAngle(self)
 
+    def setInclinationAngleGuarded(self, d):
+        r"""setInclinationAngleGuarded(Beam self, double d)"""
+        return _libBornAgainDevice.Beam_setInclinationAngleGuarded(self, d)
+
+    def setAzimuthalAngleGuarded(self, d):
+        r"""setAzimuthalAngleGuarded(Beam self, double d)"""
+        return _libBornAgainDevice.Beam_setAzimuthalAngleGuarded(self, d)
+
+    def setWavelengthGuarded(self, d):
+        r"""setWavelengthGuarded(Beam self, double d)"""
+        return _libBornAgainDevice.Beam_setWavelengthGuarded(self, d)
+
     def setWavelength(self, wavelength):
         r"""
         setWavelength(Beam self, double wavelength)
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index 032e3bf8a7a..675531001bc 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -31331,6 +31331,52 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_Beam_parameterWavelength(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Beam *arg1 = (Beam *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  RealParameter *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Beam, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Beam_parameterWavelength" "', argument " "1"" of type '" "Beam const *""'"); 
+  }
+  arg1 = reinterpret_cast< Beam * >(argp1);
+  result = (RealParameter *)((Beam const *)arg1)->parameterWavelength();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Beam_parameterAzimuthalAngle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Beam *arg1 = (Beam *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  RealParameter *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Beam, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Beam_parameterAzimuthalAngle" "', argument " "1"" of type '" "Beam const *""'"); 
+  }
+  arg1 = reinterpret_cast< Beam * >(argp1);
+  result = (RealParameter *)((Beam const *)arg1)->parameterAzimuthalAngle();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_Beam_parameterInclinationAngle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   Beam *arg1 = (Beam *) 0 ;
@@ -31354,6 +31400,93 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_Beam_setInclinationAngleGuarded(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Beam *arg1 = (Beam *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Beam_setInclinationAngleGuarded", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Beam, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Beam_setInclinationAngleGuarded" "', argument " "1"" of type '" "Beam *""'"); 
+  }
+  arg1 = reinterpret_cast< Beam * >(argp1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Beam_setInclinationAngleGuarded" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->setInclinationAngleGuarded(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Beam_setAzimuthalAngleGuarded(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Beam *arg1 = (Beam *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Beam_setAzimuthalAngleGuarded", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Beam, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Beam_setAzimuthalAngleGuarded" "', argument " "1"" of type '" "Beam *""'"); 
+  }
+  arg1 = reinterpret_cast< Beam * >(argp1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Beam_setAzimuthalAngleGuarded" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->setAzimuthalAngleGuarded(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Beam_setWavelengthGuarded(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Beam *arg1 = (Beam *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Beam_setWavelengthGuarded", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Beam, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Beam_setWavelengthGuarded" "', argument " "1"" of type '" "Beam *""'"); 
+  }
+  arg1 = reinterpret_cast< Beam * >(argp1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Beam_setWavelengthGuarded" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->setWavelengthGuarded(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_Beam_setWavelength(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   Beam *arg1 = (Beam *) 0 ;
@@ -44596,7 +44729,12 @@ static PyMethodDef SwigMethods[] = {
 		"Returns footprint factor. \n"
 		"\n"
 		""},
+	 { "Beam_parameterWavelength", _wrap_Beam_parameterWavelength, METH_O, "Beam_parameterWavelength(Beam self) -> RealParameter *"},
+	 { "Beam_parameterAzimuthalAngle", _wrap_Beam_parameterAzimuthalAngle, METH_O, "Beam_parameterAzimuthalAngle(Beam self) -> RealParameter *"},
 	 { "Beam_parameterInclinationAngle", _wrap_Beam_parameterInclinationAngle, METH_O, "Beam_parameterInclinationAngle(Beam self) -> RealParameter *"},
+	 { "Beam_setInclinationAngleGuarded", _wrap_Beam_setInclinationAngleGuarded, METH_VARARGS, "Beam_setInclinationAngleGuarded(Beam self, double d)"},
+	 { "Beam_setAzimuthalAngleGuarded", _wrap_Beam_setAzimuthalAngleGuarded, METH_VARARGS, "Beam_setAzimuthalAngleGuarded(Beam self, double d)"},
+	 { "Beam_setWavelengthGuarded", _wrap_Beam_setWavelengthGuarded, METH_VARARGS, "Beam_setWavelengthGuarded(Beam self, double d)"},
 	 { "Beam_setWavelength", _wrap_Beam_setWavelength, METH_VARARGS, "\n"
 		"Beam_setWavelength(Beam self, double wavelength)\n"
 		"void Beam::setWavelength(double wavelength)\n"
-- 
GitLab