From 0f3a09f3d0f2c704631552ac4b0c7ac317622bbe Mon Sep 17 00:00:00 2001 From: Christoph Lehmann <christoph.lehmann@ufz.de> Date: Thu, 4 Aug 2016 11:26:24 +0200 Subject: [PATCH] [NL] moved max fct args; renamed argument info -> ~names --- NumLib/NamedFunction.cpp | 24 +++++++++---------- NumLib/NamedFunction.h | 43 ++++++++++++++-------------------- NumLib/NamedFunctionCaller.cpp | 7 +++--- 3 files changed, 34 insertions(+), 40 deletions(-) diff --git a/NumLib/NamedFunction.cpp b/NumLib/NamedFunction.cpp index e8489db72ba..fbb5124beec 100644 --- a/NumLib/NamedFunction.cpp +++ b/NumLib/NamedFunction.cpp @@ -64,9 +64,9 @@ static const CallerFunction callers[] = { generateCaller<21>(), generateCaller<22>(), generateCaller<23>(), generateCaller<24>(), generateCaller<25>(), generateCaller<26>(), generateCaller<27>(), generateCaller<28>(), generateCaller<29>(), - generateCaller<30>(), generateCaller<31>()}; + generateCaller<30>(), generateCaller<31>(), generateCaller<32>()}; static_assert(sizeof(callers) / sizeof(CallerFunction) == - NumLib::MAX_FUNCTION_ARGS, + NumLib::NamedFunction::MAX_FUNCTION_ARGS + 1, "You did not instantiate the right number of callers."); /*! Deletes the given \c function. @@ -113,9 +113,9 @@ static const DeleterFunction deleters[] = { generateDeleter<21>(), generateDeleter<22>(), generateDeleter<23>(), generateDeleter<24>(), generateDeleter<25>(), generateDeleter<26>(), generateDeleter<27>(), generateDeleter<28>(), generateDeleter<29>(), - generateDeleter<30>(), generateDeleter<31>()}; + generateDeleter<30>(), generateDeleter<31>(), generateDeleter<32>()}; static_assert(sizeof(deleters) / sizeof(DeleterFunction) == - NumLib::MAX_FUNCTION_ARGS, + NumLib::NamedFunction::MAX_FUNCTION_ARGS + 1, "You did not instantiate the right number of deleters."); /*! Copies the given \c function. @@ -162,16 +162,16 @@ static const CopierFunction copiers[] = { generateCopier<21>(), generateCopier<22>(), generateCopier<23>(), generateCopier<24>(), generateCopier<25>(), generateCopier<26>(), generateCopier<27>(), generateCopier<28>(), generateCopier<29>(), - generateCopier<30>(), generateCopier<31>()}; + generateCopier<30>(), generateCopier<31>(), generateCopier<32>()}; static_assert(sizeof(copiers) / sizeof(CopierFunction) == - NumLib::MAX_FUNCTION_ARGS, + NumLib::NamedFunction::MAX_FUNCTION_ARGS + 1, "You did not instantiate the right number of deleters."); namespace NumLib { NamedFunction::NamedFunction(NamedFunction&& other) : _name(std::move(other._name)), - _argument_info(std::move(other._argument_info)), + _argument_names(std::move(other._argument_names)), _function(other._function) { other._function = nullptr; @@ -179,20 +179,20 @@ NamedFunction::NamedFunction(NamedFunction&& other) NamedFunction::NamedFunction(NamedFunction const& other) : _name(other._name), - _argument_info(other._argument_info), - _function(copiers[_argument_info.size()](other._function)) + _argument_names(other._argument_names), + _function(copiers[_argument_names.size()](other._function)) { } NamedFunction::~NamedFunction() { - deleters[_argument_info.size()](_function); + deleters[_argument_names.size()](_function); } double NamedFunction::call(const std::vector<double>& arguments) const { - assert(arguments.size() == _argument_info.size()); - return callers[_argument_info.size()](_function, arguments); + assert(arguments.size() == _argument_names.size()); + return callers[_argument_names.size()](_function, arguments); } } // namespace NumLib diff --git a/NumLib/NamedFunction.h b/NumLib/NamedFunction.h index fe2edaa1d39..5cdea7ec71f 100644 --- a/NumLib/NamedFunction.h +++ b/NumLib/NamedFunction.h @@ -10,12 +10,12 @@ #ifndef NUMLIB_NAMED_FUNCTION #define NUMLIB_NAMED_FUNCTION -#include <string> -#include <vector> +#include <cassert> #include <functional> #include <memory> -#include <cassert> +#include <string> #include <type_traits> +#include <vector> namespace detail { @@ -44,31 +44,23 @@ const bool AllTypesSameAs<TRef>::value; } // namespace detail - - namespace NumLib { -//! Maximum number of function arguments supported by NamedFunction. -const int MAX_FUNCTION_ARGS = 32; - //! Stores a function object along with a name for it and information about its //! arguments. class NamedFunction final { public: - using ArgumentInfo = std::string; - /*! Constructs a new named function. * * \param name the function's name - * \param arguments names of arguments of the function + * \param argument_names names of arguments of the function * \param function the actual function object */ template <typename ReturnType, typename... Arguments> - NamedFunction( - std::string const& name, - std::vector<ArgumentInfo>&& arguments, - std::function<ReturnType(Arguments...)>&& function); + NamedFunction(std::string const& name, + std::vector<std::string>&& argument_names, + std::function<ReturnType(Arguments...)>&& function); NamedFunction(NamedFunction&& other); NamedFunction(NamedFunction const&); @@ -77,22 +69,24 @@ public: //! Returns the function's name. std::string const& getName() const { return _name; } - - //! Returns information about the function's arguments. - std::vector<ArgumentInfo> const& getArgumentInfo() const + //! Returns the names of the function's arguments. + std::vector<std::string> const& getArgumentNames() const { - return _argument_info; + return _argument_names; } //! Call the function with the supplied arguments. double call(std::vector<double> const& arguments) const; + //! Maximum number of function arguments supported by NamedFunction. + static const int MAX_FUNCTION_ARGS = 32; + private: //! The function's name. std::string _name; //! Information about the function's arguments. - std::vector<ArgumentInfo> _argument_info; + std::vector<std::string> _argument_names; //! The function handle. void* _function; @@ -100,10 +94,10 @@ private: template <typename ReturnType, typename... Arguments> NamedFunction::NamedFunction(std::string const& name, - std::vector<ArgumentInfo>&& argument_info, + std::vector<std::string>&& argument_names, std::function<ReturnType(Arguments...)>&& function) : _name(name), - _argument_info(std::move(argument_info)), + _argument_names(std::move(argument_names)), _function( new std::function<ReturnType(Arguments...)>(std::move(function))) { @@ -114,10 +108,9 @@ NamedFunction::NamedFunction(std::string const& name, static_assert(sizeof...(Arguments) <= MAX_FUNCTION_ARGS, "The function you passed has too many arguments."); - assert(sizeof...(Arguments) == _argument_info.size()); + assert(sizeof...(Arguments) == _argument_names.size()); } -} // namespace NumLib - +} // namespace NumLib #endif // NUMLIB_NAMED_FUNCTION diff --git a/NumLib/NamedFunctionCaller.cpp b/NumLib/NamedFunctionCaller.cpp index b7317f4fc8f..5d5e3a1743b 100644 --- a/NumLib/NamedFunctionCaller.cpp +++ b/NumLib/NamedFunctionCaller.cpp @@ -120,7 +120,8 @@ void NamedFunctionCaller::addNamedFunction(NamedFunction&& fct) _map_name_idx, fct.getName(), _named_functions.size(), "The name of the function is not unique."); - _map_sink_source.emplace_back(fct.getArgumentInfo().size(), _uninitialized); + _map_sink_source.emplace_back(fct.getArgumentNames().size(), + _uninitialized); _named_functions.push_back(std::move(fct)); } @@ -157,7 +158,7 @@ void NamedFunctionCaller::applyPlugs() auto const sink_fct_idx = sink_it->second; auto const& sink_args = - _named_functions[sink_it->second].getArgumentInfo(); + _named_functions[sink_it->second].getArgumentNames(); auto const sink_arg_it = std::find(sink_args.begin(), sink_args.end(), sink_arg); if (sink_arg_it == sink_args.end()) @@ -216,7 +217,7 @@ double NamedFunctionCaller::call( _named_functions[function_idx].getName().c_str()); auto const& sis_sos = _map_sink_source[function_idx]; assert(sis_sos.size() == - _named_functions[function_idx].getArgumentInfo().size()); + _named_functions[function_idx].getArgumentNames().size()); std::vector<double> fct_args(sis_sos.size()); for (std::size_t sink=0; sink<sis_sos.size(); ++sink) -- GitLab