diff --git a/MathLib/Curve/CreatePiecewiseLinearCurve-impl.h b/MathLib/Curve/CreatePiecewiseLinearCurve.cpp similarity index 83% rename from MathLib/Curve/CreatePiecewiseLinearCurve-impl.h rename to MathLib/Curve/CreatePiecewiseLinearCurve.cpp index a8fe91c2e98e3ae1ece3c81c58ab629e1f8a7be3..e3278642b538dfd4204e4ecb7661a3f1b5167abe 100644 --- a/MathLib/Curve/CreatePiecewiseLinearCurve-impl.h +++ b/MathLib/Curve/CreatePiecewiseLinearCurve.cpp @@ -10,14 +10,15 @@ * Created on November 11, 2016, 10:49 AM */ -#include "BaseLib/ConfigTree-fwd.h" -#include "BaseLib/Error.h" #include "CreatePiecewiseLinearCurve.h" +#include "BaseLib/ConfigTree.h" +#include "BaseLib/Error.h" + namespace MathLib { -template <typename CurveType> -std::unique_ptr<CurveType> createPiecewiseLinearCurve( + +PiecewiseLinearCurveConfig parsePiecewiseLinearCurveConfig( BaseLib::ConfigTree const& config) { auto x = @@ -37,6 +38,7 @@ std::unique_ptr<CurveType> createPiecewiseLinearCurve( "The given coordinates and values vector sizes are " "different."); } - return std::make_unique<CurveType>(std::move(x), std::move(y)); + + return {std::move(x), std::move(y)}; } } // namespace MathLib diff --git a/MathLib/Curve/CreatePiecewiseLinearCurve.h b/MathLib/Curve/CreatePiecewiseLinearCurve.h index 074c2f8a7ea6617b03f6640df3b1d1326f3697aa..6d1018712ea28a1fe560d85349f3c31115d7f799 100644 --- a/MathLib/Curve/CreatePiecewiseLinearCurve.h +++ b/MathLib/Curve/CreatePiecewiseLinearCurve.h @@ -13,6 +13,7 @@ #pragma once #include <memory> +#include <vector> namespace BaseLib { @@ -21,11 +22,22 @@ class ConfigTree; namespace MathLib { +struct PiecewiseLinearCurveConfig +{ + std::vector<double> xs; + std::vector<double> ys; +}; + +PiecewiseLinearCurveConfig parsePiecewiseLinearCurveConfig( + BaseLib::ConfigTree const& config); + /// Create a curve /// \param config ConfigTree object has a tag of `<curve>` template <typename CurveType> std::unique_ptr<CurveType> createPiecewiseLinearCurve( - BaseLib::ConfigTree const& config); -}; - -#include "CreatePiecewiseLinearCurve-impl.h" + BaseLib::ConfigTree const& config) +{ + auto [xs, ys] = parsePiecewiseLinearCurveConfig(config); + return std::make_unique<CurveType>(std::move(xs), std::move(ys)); +} +}; // namespace MathLib