cepgen is hosted by Hepforge, IPPP Durham
CepGen N/A
Central exclusive processes event generator
FunctionWrapper.h
Go to the documentation of this file.
1/*
2 * CepGen: a central exclusive processes event generator
3 * Copyright (C) 2022-2025 Laurent Forthomme
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef CepGen_Utils_FunctionWrapper_h
20#define CepGen_Utils_FunctionWrapper_h
21
22#include <functional>
23
25
26namespace cepgen::utils {
29 public:
30 explicit FunctionWrapper(const std::function<double(double)>& func) : func_(func) {}
31 explicit FunctionWrapper(const std::function<double(double, const ParametersList&)>& func) : func_params_(func) {}
32 explicit FunctionWrapper(const std::function<double(double, void*)>& func) : func_obj_(func) {}
33
35 inline double operator()(double x, const ParametersList& params = ParametersList()) const {
36 if (func_params_)
37 return func_params_(x, params);
38 return func_(x);
39 }
41 inline double operator()(double x, void* obj) const {
42 if (func_obj_)
43 return func_obj_(x, obj);
44 return func_(x);
45 }
47 template <typename T>
48 inline double operator()(double x, const T& obj) const {
49 if (func_obj_)
50 return func_obj_(x, dynamic_cast<void*>(&obj));
51 if (func_params_)
52 return func_params_(x, ParametersList().set("parameter", obj));
53 return func_(x);
54 }
55
56 inline operator const std::function<double(double)>&() { return func_; }
57 inline operator const std::function<double(double, void*)>&() { return func_obj_; }
58
59 private:
60 std::function<double(double)> func_{nullptr};
61 std::function<double(double, const ParametersList&)> func_params_{nullptr};
62 std::function<double(double, void*)> func_obj_{nullptr};
63 };
64} // namespace cepgen::utils
65
66#endif
Wrapper to a 1-dimensional function with optional parameters.
FunctionWrapper(const std::function< double(double)> &func)
double operator()(double x, const ParametersList &params=ParametersList()) const
Call the function with a user collection of parameters.
double operator()(double x, void *obj) const
Call the function with an unspecified object as parameters.
FunctionWrapper(const std::function< double(double, void *)> &func)
FunctionWrapper(const std::function< double(double, const ParametersList &)> &func)
double operator()(double x, const T &obj) const
Call the function with a templated object as parameters.
Collection of utilities.