From 3bf46c8996290d93bd7771bc1a241bd7fa328a60 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Tue, 30 Jul 2019 15:14:54 +0200
Subject: [PATCH] Switch to unique_ptr in all methods dealing with OutputData

---
 Core/Fitting/ObjectiveMetric.cpp                          | 4 ++--
 Core/InputOutput/IntensityDataIOFactory.cpp               | 4 ++--
 Core/Instrument/SimulationResult.cpp                      | 6 +++---
 Core/Instrument/SimulationResult.h                        | 2 +-
 GUI/coregui/Models/JobItemUtils.cpp                       | 2 +-
 GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp           | 2 +-
 Tests/Functional/Core/CoreSpecial/BatchSimulation.cpp     | 4 ++--
 Tests/Functional/Core/CoreSpecial/PolDWBAMagCylinders.cpp | 6 +++---
 .../Functional/Core/CoreStandardTest/CoreStandardTest.cpp | 2 +-
 .../Core/SelfConsistenceTest/SelfConsistenceTest.cpp      | 2 +-
 Tests/Functional/Fit/FitObjective/FitPlan.cpp             | 2 +-
 Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.cpp  | 4 ++--
 Tests/Functional/Python/PyStandard/PyStandardTest.cpp     | 2 +-
 Tests/UnitTests/Core/Fresnel/DepthProbeSimulationTest.cpp | 6 +++---
 Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.cpp   | 8 ++++----
 Tests/UnitTests/Core/Other/SimulationResultTest.cpp       | 4 ++--
 16 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/Core/Fitting/ObjectiveMetric.cpp b/Core/Fitting/ObjectiveMetric.cpp
index c17cb2fb642..dd7d3be10eb 100644
--- a/Core/Fitting/ObjectiveMetric.cpp
+++ b/Core/Fitting/ObjectiveMetric.cpp
@@ -252,8 +252,8 @@ double RQ4Metric::compute(const SimDataPair& data_pair, bool use_weights) const
         return Chi2Metric::compute(data_pair, use_weights);
 
     // fetching data in RQ4 form
-    std::unique_ptr<OutputData<double>> sim_data(data_pair.simulationResult().data(AxesUnits::RQ4));
-    std::unique_ptr<OutputData<double>> exp_data(data_pair.experimentalData().data(AxesUnits::RQ4));
+    auto sim_data = data_pair.simulationResult().data(AxesUnits::RQ4);
+    auto exp_data = data_pair.experimentalData().data(AxesUnits::RQ4);
 
     return computeFromArrays(sim_data->getRawDataVector(), exp_data->getRawDataVector(),
                              data_pair.user_weights_array());
diff --git a/Core/InputOutput/IntensityDataIOFactory.cpp b/Core/InputOutput/IntensityDataIOFactory.cpp
index f5e88036fa2..44e55927c2d 100644
--- a/Core/InputOutput/IntensityDataIOFactory.cpp
+++ b/Core/InputOutput/IntensityDataIOFactory.cpp
@@ -65,6 +65,6 @@ void IntensityDataIOFactory::writeIntensityData(const IHistogram& histogram,
 void IntensityDataIOFactory::writeSimulationResult(const SimulationResult& result,
                                                    const std::string& file_name)
 {
-    std::unique_ptr<OutputData<double>> P_data(result.data());
-    writeOutputData(*P_data, file_name);
+    auto data = result.data();
+    writeOutputData(*data, file_name);
 }
diff --git a/Core/Instrument/SimulationResult.cpp b/Core/Instrument/SimulationResult.cpp
index aba3ddd9ad2..a4f4b279a01 100644
--- a/Core/Instrument/SimulationResult.cpp
+++ b/Core/Instrument/SimulationResult.cpp
@@ -58,12 +58,12 @@ SimulationResult& SimulationResult::operator=(SimulationResult&& other)
     return *this;
 }
 
-OutputData<double>* SimulationResult::data(AxesUnits units) const
+std::unique_ptr<OutputData<double> > SimulationResult::data(AxesUnits units) const
 {
     if (!mP_data)
         throw std::runtime_error(
             "Error in SimulationResult::data:Attempt to access non-initialized data");
-    return mP_unit_converter->createConvertedData(*mP_data, units).release();
+    return mP_unit_converter->createConvertedData(*mP_data, units);
 }
 
 Histogram2D* SimulationResult::histogram2d(AxesUnits units) const
@@ -72,7 +72,7 @@ Histogram2D* SimulationResult::histogram2d(AxesUnits units) const
         throw std::runtime_error("Error in SimulationResult::histogram2d: "
                                  "dimension of data is not 2. Please use axis(), array() and "
                                  "data() functions for 1D data.");
-    std::unique_ptr<OutputData<double>> P_data(data(units));
+    auto P_data = data(units);
     return new Histogram2D(*P_data);
 }
 
diff --git a/Core/Instrument/SimulationResult.h b/Core/Instrument/SimulationResult.h
index 326cdc80555..22d2ba03274 100644
--- a/Core/Instrument/SimulationResult.h
+++ b/Core/Instrument/SimulationResult.h
@@ -51,7 +51,7 @@ public:
     SimulationResult& operator=(SimulationResult&& other);
 
 #ifndef SWIG
-    OutputData<double>* data(AxesUnits units = AxesUnits::DEFAULT) const;
+    std::unique_ptr<OutputData<double>> data(AxesUnits units = AxesUnits::DEFAULT) const;
 #endif
 
     Histogram2D* histogram2d(AxesUnits units = AxesUnits::DEFAULT) const;
diff --git a/GUI/coregui/Models/JobItemUtils.cpp b/GUI/coregui/Models/JobItemUtils.cpp
index 21bd4394acf..38b35f40712 100644
--- a/GUI/coregui/Models/JobItemUtils.cpp
+++ b/GUI/coregui/Models/JobItemUtils.cpp
@@ -125,7 +125,7 @@ void JobItemUtils::setResults(DataItem* intensityItem, const Simulation* simulat
         updateAxesTitle(intensityItem, converter, converter.defaultUnits());
     }
     auto selected_units = JobItemUtils::axesUnitsFromName(intensityItem->selectedAxesUnits());
-    std::unique_ptr<OutputData<double>> data(sim_result.data(selected_units));
+    auto data = sim_result.data(selected_units);
     intensityItem->setOutputData(data.release());
 }
 
diff --git a/GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp b/GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp
index 41cb085637c..da978f89d1a 100644
--- a/GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp
+++ b/GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp
@@ -51,7 +51,7 @@ void GUIFitObserver::update(const FitObjective* subject)
     if (subject->isCompleted())
         info.m_log_info = subject->minimizerResult().toString();
 
-    std::unique_ptr<OutputData<double>> data(subject->dataPair().simulationResult().data());
+    auto data = subject->dataPair().simulationResult().data();
     info.m_sim_values = data->getRawDataVector();
 
     m_iteration_info = info;
diff --git a/Tests/Functional/Core/CoreSpecial/BatchSimulation.cpp b/Tests/Functional/Core/CoreSpecial/BatchSimulation.cpp
index b5795388b40..3ed25497437 100644
--- a/Tests/Functional/Core/CoreSpecial/BatchSimulation.cpp
+++ b/Tests/Functional/Core/CoreSpecial/BatchSimulation.cpp
@@ -32,8 +32,8 @@ bool BatchSimulation::runTest()
     simulation->setSampleBuilder(builder);
     simulation->runSimulation();
     auto sim_result = simulation->result();
-    const std::unique_ptr<OutputData<double>> reference(sim_result.data());
-    const std::unique_ptr<OutputData<double>> result(reference->clone());
+    const auto reference = sim_result.data();
+    const auto result = reference->clone();
     result->setAllTo(0.0);
 
     const unsigned n_batches = 9;
diff --git a/Tests/Functional/Core/CoreSpecial/PolDWBAMagCylinders.cpp b/Tests/Functional/Core/CoreSpecial/PolDWBAMagCylinders.cpp
index 5083f65a542..60fc1663c05 100644
--- a/Tests/Functional/Core/CoreSpecial/PolDWBAMagCylinders.cpp
+++ b/Tests/Functional/Core/CoreSpecial/PolDWBAMagCylinders.cpp
@@ -44,19 +44,19 @@ bool PolDWBAMagCylinders::runTest()
     simulation->setAnalyzerProperties(zplus, 1.0, 0.5);
     simulation->runSimulation();
     auto sim_result = simulation->result();
-    const std::unique_ptr<OutputData<double> > P_data00(sim_result.data());
+    const auto P_data00 = sim_result.data();
 
     simulation->setBeamPolarization(zplus);
     simulation->setAnalyzerProperties(zplus, -1.0, 0.5);
     simulation->runSimulation();
     sim_result = simulation->result();
-    const std::unique_ptr<OutputData<double> > P_data01(sim_result.data());
+    const auto P_data01 = sim_result.data();
 
     simulation->setBeamPolarization(zmin);
     simulation->setAnalyzerProperties(zplus, 1.0, 0.5);
     simulation->runSimulation();
     sim_result = simulation->result();
-    const std::unique_ptr<OutputData<double> > P_data10(sim_result.data());
+    const auto P_data10 = sim_result.data();
 
     simulation->setBeamPolarization(zmin);
     simulation->setAnalyzerProperties(zplus, -1.0, 0.5);
diff --git a/Tests/Functional/Core/CoreStandardTest/CoreStandardTest.cpp b/Tests/Functional/Core/CoreStandardTest/CoreStandardTest.cpp
index 1e48aa7c99c..6ed58d835b8 100644
--- a/Tests/Functional/Core/CoreStandardTest/CoreStandardTest.cpp
+++ b/Tests/Functional/Core/CoreStandardTest/CoreStandardTest.cpp
@@ -36,7 +36,7 @@ bool CoreStandardTest::runTest()
     assert(m_reference_simulation);
     m_reference_simulation->runSimulation();
     auto sim_result = m_reference_simulation->result();
-    const std::unique_ptr<OutputData<double>> result_data(sim_result.data());
+    const auto result_data = sim_result.data();
 
     // Compare with reference if available.
     bool success = false;
diff --git a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.cpp b/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.cpp
index b019886abb5..edc04a591a2 100644
--- a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.cpp
+++ b/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.cpp
@@ -45,7 +45,7 @@ bool SelfConsistenceTest::runTest()
     {
         simulation->runSimulation();
         auto sim_result = simulation->result();
-        results.push_back(std::unique_ptr<OutputData<double>>(sim_result.data()));
+        results.push_back(sim_result.data());
     }
 
     // Compare with reference if available.
diff --git a/Tests/Functional/Fit/FitObjective/FitPlan.cpp b/Tests/Functional/Fit/FitObjective/FitPlan.cpp
index 14bfc71eb7c..5dc46f0e417 100644
--- a/Tests/Functional/Fit/FitObjective/FitPlan.cpp
+++ b/Tests/Functional/Fit/FitObjective/FitPlan.cpp
@@ -126,5 +126,5 @@ std::unique_ptr<OutputData<double> > FitPlan::createOutputData() const
     params.setValues(expectedValues());
     auto simulation = buildSimulation(params);
     simulation->runSimulation();
-    return std::unique_ptr<OutputData<double>>(simulation->result().data());
+    return simulation->result().data();
 }
diff --git a/Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.cpp b/Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.cpp
index acad7816c51..8cddb7d41da 100644
--- a/Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.cpp
+++ b/Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.cpp
@@ -54,8 +54,8 @@ bool GUIStandardTest::runTest()
     domain_simulation->runSimulation();
     auto domain_result = domain_simulation->result();
 
-    const std::unique_ptr<OutputData<double> > domain_data(domain_result.data());
-    const std::unique_ptr<OutputData<double> > reference_data(ref_result.data());
+    const auto domain_data = domain_result.data();
+    const auto reference_data = ref_result.data();
 
     return TestUtils::isTheSame(*domain_data, *reference_data, m_threshold);
 }
diff --git a/Tests/Functional/Python/PyStandard/PyStandardTest.cpp b/Tests/Functional/Python/PyStandard/PyStandardTest.cpp
index a79bfedd679..92c89166160 100644
--- a/Tests/Functional/Python/PyStandard/PyStandardTest.cpp
+++ b/Tests/Functional/Python/PyStandard/PyStandardTest.cpp
@@ -48,7 +48,7 @@ bool PyStandardTest::runTest()
     m_reference_simulation->runSimulation();
     auto ref_result = m_reference_simulation->result();
 
-    const std::unique_ptr<OutputData<double>> reference_data(ref_result.data());
+    const auto reference_data = ref_result.data();
 
     // Compare results
     const std::unique_ptr<OutputData<double>> domain_data(
diff --git a/Tests/UnitTests/Core/Fresnel/DepthProbeSimulationTest.cpp b/Tests/UnitTests/Core/Fresnel/DepthProbeSimulationTest.cpp
index d47551f41cb..2035106d8a0 100644
--- a/Tests/UnitTests/Core/Fresnel/DepthProbeSimulationTest.cpp
+++ b/Tests/UnitTests/Core/Fresnel/DepthProbeSimulationTest.cpp
@@ -166,7 +166,7 @@ TEST_F(DepthProbeSimulationTest, ResultAquisition)
 
     EXPECT_THROW(sim_result.data(AxesUnits::MM), std::runtime_error);
 
-    const std::unique_ptr<OutputData<double>> output(sim_result.data());
+    const auto output = sim_result.data();
     EXPECT_EQ(depth_map->getTotalNumberOfBins(), output->getAllocatedSize());
     EXPECT_EQ(depth_map->getRank(), output->getRank());
     EXPECT_EQ(depth_map->getXaxis().getMin(), output->getAxis(0).getMin());
@@ -186,8 +186,8 @@ TEST_F(DepthProbeSimulationTest, SimulationClone)
 
     SimulationResult clone_result = clone->result();
 
-    std::unique_ptr<OutputData<double>> sim_output(sim_result.data());
-    std::unique_ptr<OutputData<double>> clone_output(clone_result.data());
+    auto sim_output = sim_result.data();
+    auto clone_output = clone_result.data();
 
     EXPECT_EQ(sim_output->getAllocatedSize(), clone_output->getAllocatedSize());
     for (size_t i = 0; i < sim_output->getAllocatedSize(); ++i) {
diff --git a/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.cpp b/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.cpp
index fc5305ed345..7516a55dc31 100644
--- a/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.cpp
+++ b/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.cpp
@@ -174,7 +174,7 @@ TEST_F(SpecularSimulationTest, ConstructSimulation)
     EXPECT_EQ(3u, sim->sample()->numberOfLayers());
 
     SimulationResult sim_result = sim->result();
-    std::unique_ptr<OutputData<double>> data(sim_result.data());
+    auto data = sim_result.data();
     EXPECT_EQ(data->getAllocatedSize(), 10u);
     EXPECT_EQ(data->totalSum(), 0.0);
     EXPECT_EQ(data->getRank(), 1u);
@@ -182,7 +182,7 @@ TEST_F(SpecularSimulationTest, ConstructSimulation)
     sim->runSimulation();
     sim_result = sim->result();
 
-    data.reset(sim_result.data());
+    data = sim_result.data();
     EXPECT_EQ(data->getAllocatedSize(), 10u);
     EXPECT_EQ(data->getRank(), 1u);
 
@@ -203,7 +203,7 @@ TEST_F(SpecularSimulationTest, SimulationClone)
     EXPECT_EQ(3u, clone->sample()->numberOfLayers());
 
     SimulationResult clone_result = clone->result();
-    std::unique_ptr<OutputData<double>> data(clone_result.data());
+    auto data = clone_result.data();
     EXPECT_EQ(data->getAllocatedSize(), 10u);
     EXPECT_EQ(data->totalSum(), 0.0);
 
@@ -214,7 +214,7 @@ TEST_F(SpecularSimulationTest, SimulationClone)
     std::unique_ptr<SpecularSimulation> clone2(sim->clone());
     clone_result = clone2->result();
 
-    const std::unique_ptr<OutputData<double>> output_data(clone_result.data());
+    const auto output_data = clone_result.data();
     EXPECT_EQ(10u, output_data->getAllocatedSize());
 
     checkBeamState(*clone2);
diff --git a/Tests/UnitTests/Core/Other/SimulationResultTest.cpp b/Tests/UnitTests/Core/Other/SimulationResultTest.cpp
index 48a2e84fcbd..c9082970cc0 100644
--- a/Tests/UnitTests/Core/Other/SimulationResultTest.cpp
+++ b/Tests/UnitTests/Core/Other/SimulationResultTest.cpp
@@ -35,7 +35,7 @@ TEST_F(SimulationResultTest, accessToEmptySimulation)
     EXPECT_EQ(result.size(), size_t(nx*ny));
 
     // OutputData has correct size and amplitudes
-    std::unique_ptr<OutputData<double>> data(result.data());
+    auto data = result.data();
     EXPECT_EQ(data->getAllocatedSize(), size_t(nx*ny));
     EXPECT_EQ(data->totalSum(), 0.0);
 }
@@ -53,7 +53,7 @@ TEST_F(SimulationResultTest, accessToEmptyRoiSimulation)
     EXPECT_EQ(result.size(), 9u);
 
     // OutputData has correct size and amplitudes
-    std::unique_ptr<OutputData<double>> data(result.data());
+    auto data = result.data();
     EXPECT_EQ(data->getAllocatedSize(), 9u);
     EXPECT_EQ(data->totalSum(), 0.0);
 }
-- 
GitLab