15 template <
typename AlphaQCOperation_T>
17 : pimpl_(new OwningModel<AlphaQCOperation_T>(std::move(alphaQCDApproach)),
18 [](void *alphaQCDApproachBytes) {
19 using Model = OwningModel<AlphaQCOperation_T>;
20 auto *
const model =
static_cast<Model *
>(alphaQCDApproachBytes);
23 alphaQCOperation_([](
void *alphaQCDApproachBytes,
double mu2) ->
double {
24 using Model = OwningModel<AlphaQCOperation_T>;
25 auto *
const model =
static_cast<Model *
>(alphaQCDApproachBytes);
26 return model->AlphaQCDMu2(
mu2);
28 clone_([](
void *alphaQCDApproachBytes) ->
void * {
29 using Model = OwningModel<AlphaQCOperation_T>;
30 auto *
const model =
static_cast<Model *
>(alphaQCDApproachBytes);
31 return new Model(*model);
38 return alphaQCOperation_(pimpl_.get(),
mu2);
42 : pimpl_(other.clone_(other.pimpl_.get()), other.pimpl_.get_deleter()),
43 clone_(other.clone_), alphaQCOperation_(other.alphaQCOperation_)
51 swap(pimpl_, copy.pimpl_);
52 swap(clone_, copy.clone_);
53 swap(alphaQCOperation_, copy.alphaQCOperation_);
62 template <
typename AlphaQCOperation_T>
struct OwningModel
64 OwningModel(AlphaQCOperation_T alphaQCDApproach) : alphaQCO_(std::move(alphaQCDApproach))
70 return alphaQCO_.AlphaQCDMu2(
mu2);
73 AlphaQCOperation_T alphaQCO_;
76 using DestroyOperation = void(
void *);
77 using CloneOperation =
void *(
void *);
78 using AlphaQCDOperation = double(
void *,
double);
80 std::unique_ptr<void, DestroyOperation *> pimpl_;
81 CloneOperation *clone_{
nullptr};
82 AlphaQCDOperation *alphaQCOperation_{
nullptr};
Definition: IQCDCoupling.h:13
IQCDCoupling(IQCDCoupling &&other) noexcept=default
IQCDCoupling & operator=(IQCDCoupling &&other)=default
double AlphaQCDMu2(double mu2) const
Definition: IQCDCoupling.h:36
IQCDCoupling(const IQCDCoupling &other)
Definition: IQCDCoupling.h:41
IQCDCoupling & operator=(IQCDCoupling const &other)
Definition: IQCDCoupling.h:47
IQCDCoupling(AlphaQCOperation_T alphaQCDApproach)
Definition: IQCDCoupling.h:16
Definition: AllFlavorsShape.h:14
int mu2
Definition: pdfset_tutorial.py:14