1#ifndef CLASSDESC_FUNCTIONDB3
2#define CLASSDESC_FUNCTIONDB3
3template <
class R,
class A1,
class A2,
class A3>
4struct Arg<R (*)(A1,A2,A3), 1>
10template <
class C,
class R,
class A1,
class A2,
class A3>
11struct Arg<R (C::*)(A1,A2,A3), 1>
17template <
class C,
class R,
class A1,
class A2,
class A3>
18struct Arg<R (C::*)(A1,A2,A3) const, 1>
24#if defined(__cplusplus) && __cplusplus>=201703L
26template <
class R,
class A1,
class A2,
class A3>
27struct Arg<R (*)(A1,A2,A3)
noexcept, 1>
33template <
class C,
class R,
class A1,
class A2,
class A3>
34struct Arg<R (C::*)(A1,A2,A3) noexcept, 1>
40template <
class C,
class R,
class A1,
class A2,
class A3>
41struct Arg<R (C::*)(A1,A2,A3) const noexcept, 1>
47template <
class R,
class A1,
class A2,
class A3>
48struct Arg<R (*)(A1,A2,A3), 2>
54template <
class C,
class R,
class A1,
class A2,
class A3>
55struct Arg<R (C::*)(A1,A2,A3), 2>
61template <
class C,
class R,
class A1,
class A2,
class A3>
62struct Arg<R (C::*)(A1,A2,A3) const, 2>
68#if defined(__cplusplus) && __cplusplus>=201703L
70template <
class R,
class A1,
class A2,
class A3>
71struct Arg<R (*)(A1,A2,A3)
noexcept, 2>
77template <
class C,
class R,
class A1,
class A2,
class A3>
78struct Arg<R (C::*)(A1,A2,A3) noexcept, 2>
84template <
class C,
class R,
class A1,
class A2,
class A3>
85struct Arg<R (C::*)(A1,A2,A3) const noexcept, 2>
91template <
class R,
class A1,
class A2,
class A3>
92struct Arg<R (*)(A1,A2,A3), 3>
98template <
class C,
class R,
class A1,
class A2,
class A3>
99struct Arg<R (C::*)(A1,A2,A3), 3>
105template <
class C,
class R,
class A1,
class A2,
class A3>
106struct Arg<R (C::*)(A1,A2,A3) const, 3>
112#if defined(__cplusplus) && __cplusplus>=201703L
114template <
class R,
class A1,
class A2,
class A3>
115struct Arg<R (*)(A1,A2,A3)
noexcept, 3>
121template <
class C,
class R,
class A1,
class A2,
class A3>
122struct Arg<R (C::*)(A1,A2,A3) noexcept, 3>
128template <
class C,
class R,
class A1,
class A2,
class A3>
129struct Arg<R (C::*)(A1,A2,A3) const noexcept, 3>
135template <
class F,
template<
class>
class P>
138 static const bool value=
true && P<typename Arg<F,1>::T>::value && P<typename Arg<F,2>::T>::value && P<typename Arg<F,3>::T>::value;
142template <
class R,
class A1,
class A2,
class A3>
143struct Arity<R (*)(A1,A2,A3)>
145 static const int V=3;
146 static const int value=3;
149template <
class R,
class A1,
class A2,
class A3>
150struct Return<R (*)(A1,A2,A3)>
156template <
class C,
class R,
class A1,
class A2,
class A3>
157struct Arity<R (* C::*)(A1,A2,A3)>
159 static const int V=3;
160 static const int value=3;
163template <
class C,
class R,
class A1,
class A2,
class A3>
164struct Return<R (* C::*)(A1,A2,A3)>
170template <
class C,
class R,
class A1,
class A2,
class A3>
171struct Arity<R (C::*)(A1,A2,A3)>
173 static const int V=3;
174 static const int value=3;
177template <
class C,
class R,
class A1,
class A2,
class A3>
178struct Return<R (C::*)(A1,A2,A3)>
184template <
class C,
class R,
class A1,
class A2,
class A3>
185struct Arity<R (C::*)(A1,A2,A3) const>
187 static const int V=3;
188 static const int value=3;
191template <
class C,
class R,
class A1,
class A2,
class A3>
192struct Return<R (C::*)(A1,A2,A3) const>
198template <
class C,
class R,
class A1,
class A2,
class A3>
199struct ClassOf<R (C::*)(A1,A2,A3)>
205template <
class C,
class R,
class A1,
class A2,
class A3>
206struct ClassOf<R (*C::*)(A1,A2,A3)>
212template <
class C,
class R,
class A1,
class A2,
class A3>
213struct ClassOf<R (C::*)(A1,A2,A3) const>
219template <
class C,
class R,
class A1,
class A2,
class A3>
220struct is_member_function_ptr<R (C::*)(A1,A2,A3)>
222 static const bool value=
true;
225template <
class C,
class R,
class A1,
class A2,
class A3>
226struct is_member_function_ptr<R (C::*)(A1,A2,A3) const>
228 static const bool value=
true;
231template <
class C,
class R,
class A1,
class A2,
class A3>
232struct is_const_method<R (C::*)(A1,A2,A3) const>
234 static const bool value=
true;
237template <
class R,
class A1,
class A2,
class A3>
238struct is_nonmember_function_ptr<R (*)(A1,A2,A3)>
240 static const bool value=
true;
243template <
class C,
class R,
class A1,
class A2,
class A3>
244struct is_nonmember_function_ptr<R (*C::*)(A1,A2,A3)>
246 static const bool value=
true;
249template <
class C,
class D,
class R,
class A1,
class A2,
class A3>
250class bound_method<C, R (D::*)(A1,A2,A3)>
252 typedef R (D::*M)(A1,A2,A3);
256 static const int arity=3;
258 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
259 bound_method(C& obj, M method): obj(&obj), method(method) {}
260 typename enable_if<Not<classdesc::is_const<C> >, R>::T
261 operator()(A1 a1,A2 a2,A3 a3)
const {
return (obj->*method)(a1,a2,a3);}
262 void rebind(C& newObj) {obj=&newObj;}
263 static const bool is_const=
false;
266template <
class C,
class D,
class R,
class A1,
class A2,
class A3>
267class bound_method<const C, R (D::*)(A1,A2,A3)>
269 typedef R (D::*M)(A1,A2,A3);
273 static const int arity=3;
275 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
276 bound_method(
const C& obj, M method): obj(&obj), method(method) {}
277 R operator()(A1 a1,A2 a2,A3 a3)
const {
278 throw std::runtime_error(
"cannot call method, inappropriate argument type");
280 void rebind(C& newObj) {obj=&newObj;}
281 static const bool is_const=
false;
284template <
class C,
class D,
class R,
class A1,
class A2,
class A3>
285class bound_method<C, R (D::*)(A1,A2,A3) const>
287 typedef R (D::*M)(A1,A2,A3)
const;
291 static const int arity=3;
293 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
294 bound_method(C& obj, M method): obj(obj), method(method) {}
295 R operator()(A1 a1,A2 a2,A3 a3)
const {
return (obj.*method)(a1,a2,a3);}
296 static const bool is_const=
true;
299#if defined(__cplusplus) && __cplusplus>=201703L
302template <
class R,
class A1,
class A2,
class A3>
303struct Arity<R (*)(A1,A2,A3)
noexcept>
305 static const int V=3;
306 static const int value=3;
309template <
class R,
class A1,
class A2,
class A3>
310struct Return<R (*)(A1,A2,A3)
noexcept>
316template <
class C,
class R,
class A1,
class A2,
class A3>
317struct Arity<R (* C::*)(A1,A2,A3)
noexcept>
319 static const int V=3;
320 static const int value=3;
323template <
class C,
class R,
class A1,
class A2,
class A3>
324struct Return<R (* C::*)(A1,A2,A3)
noexcept>
330template <
class C,
class R,
class A1,
class A2,
class A3>
331struct Arity<R (C::*)(A1,A2,A3) noexcept>
333 static const int V=3;
334 static const int value=3;
337template <
class C,
class R,
class A1,
class A2,
class A3>
338struct Return<R (C::*)(A1,A2,A3) noexcept>
344template <
class C,
class R,
class A1,
class A2,
class A3>
345struct Arity<R (C::*)(A1,A2,A3) const noexcept>
347 static const int V=3;
348 static const int value=3;
351template <
class C,
class R,
class A1,
class A2,
class A3>
352struct Return<R (C::*)(A1,A2,A3) const noexcept>
358template <
class C,
class R,
class A1,
class A2,
class A3>
359struct ClassOf<R (C::*)(A1,A2,A3) noexcept>
365template <
class C,
class R,
class A1,
class A2,
class A3>
366struct ClassOf<R (*C::*)(A1,A2,A3)
noexcept>
372template <
class C,
class R,
class A1,
class A2,
class A3>
373struct ClassOf<R (C::*)(A1,A2,A3) const noexcept>
379template <
class C,
class R,
class A1,
class A2,
class A3>
380struct is_member_function_ptr<R (C::*)(A1,A2,A3) noexcept>
382 static const bool value=
true;
385template <
class C,
class R,
class A1,
class A2,
class A3>
386struct is_member_function_ptr<R (C::*)(A1,A2,A3) const noexcept>
388 static const bool value=
true;
391template <
class C,
class R,
class A1,
class A2,
class A3>
392struct is_const_method<R (C::*)(A1,A2,A3) const noexcept>
394 static const bool value=
true;
397template <
class R,
class A1,
class A2,
class A3>
398struct is_nonmember_function_ptr<R (*)(A1,A2,A3)
noexcept>
400 static const bool value=
true;
403template <
class C,
class R,
class A1,
class A2,
class A3>
404struct is_nonmember_function_ptr<R (*C::*)(A1,A2,A3)
noexcept>
406 static const bool value=
true;
409template <
class C,
class D,
class R,
class A1,
class A2,
class A3>
410class bound_method<C, R (D::*)(A1,A2,A3) noexcept>
412 typedef R (D::*M)(A1,A2,A3);
416 static const int arity=3;
418 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
419 bound_method(C& obj, M method): obj(&obj), method(method) {}
420 typename enable_if<Not<classdesc::is_const<C> >, R>::T
421 operator()(A1 a1,A2 a2,A3 a3)
const {
return (obj->*method)(a1,a2,a3);}
422 void rebind(C& newObj) {obj=&newObj;}
423 static const bool is_const=
false;
426template <
class C,
class D,
class A1,
class A2,
class A3>
427class bound_method<C, void (D::*)(A1,A2,A3) noexcept>
429 typedef void (D::*M)(A1,A2,A3);
433 static const int arity=3;
435 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
436 bound_method(C& obj, M method): obj(&obj), method(method) {}
437 typename enable_if<Not<classdesc::is_const<C> > >::T
438 operator()(A1 a1,A2 a2,A3 a3)
const {(obj->*method)(a1,a2,a3);}
439 void rebind(C& newObj) {obj=&newObj;}
440 static const bool is_const=
false;
443template <
class C,
class D,
class R,
class A1,
class A2,
class A3>
444class bound_method<const C, R (D::*)(A1,A2,A3) noexcept>
446 typedef R (D::*M)(A1,A2,A3);
450 static const int arity=3;
452 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
453 bound_method(
const C& obj, M method): obj(&obj), method(method) {}
454 R operator()(A1 a1,A2 a2,A3 a3)
const {
455 throw std::runtime_error(
"cannot call method, inappropriate argument type");
457 void rebind(C& newObj) {obj=&newObj;}
458 static const bool is_const=
false;
461template <
class C,
class D,
class A1,
class A2,
class A3>
462class bound_method<const C, void (D::*)(A1,A2,A3) noexcept>
464 typedef void (D::*M)(A1,A2,A3);
468 static const int arity=3;
470 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
471 bound_method(
const C& obj, M method): obj(&obj), method(method) {}
472 typename enable_if<Not<classdesc::is_const<C> > >::T
473 operator()(A1 a1,A2 a2,A3 a3)
const {
474 throw std::runtime_error(
"cannot call method, inappropriate argument type");
476 void rebind(C& newObj) {obj=&newObj;}
477 static const bool is_const=
false;
480template <
class C,
class D,
class R,
class A1,
class A2,
class A3>
481class bound_method<C, R (D::*)(A1,A2,A3) const noexcept>
483 typedef R (D::*M)(A1,A2,A3)
const;
487 static const int arity=3;
489 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
490 bound_method(C& obj, M method): obj(obj), method(method) {}
491 R operator()(A1 a1,A2 a2,A3 a3)
const {
return (obj.*method)(a1,a2,a3);}
492 static const bool is_const=
true;
495template <
class C,
class D,
class A1,
class A2,
class A3>
496class bound_method<C, void (D::*)(A1,A2,A3) const noexcept>
498 typedef void (D::*M)(A1,A2,A3)
const;
502 static const int arity=3;
504 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
505 bound_method(C& obj, M method): obj(obj), method(method) {}
506 void operator()(A1 a1,A2 a2,A3 a3)
const {(obj.*method)(a1,a2,a3);}
507 static const bool is_const=
true;
511template <
class F,
class Args>
512typename enable_if<And<AllArgs<F, is_rvalue>, Eq<Arity<F>::value, 3> >,
513 typename Return<F>::T>::T
514apply_nonvoid_fn(F f, Args& a, Fdummy<F> dum=0)
516 return f(a[0],a[1],a[2]);
525template <
class F,
class Args>
526typename enable_if<And<AllArgs<F, is_rvalue>, Eq<Arity<F>::value, 3> >,
528apply_void_fn(F f, Args& a, Fdummy<F> dum=0)
533template <
class Buffer,
class F>
534typename enable_if<Eq<Arity<F>::value, 3>,
typename Return<F>::T>::T
535callOnBuffer(Buffer& buffer, F f)
537 typename remove_const<typename remove_reference<typename Arg<F,1>::T>::type>::type a1;
539 typename remove_const<typename remove_reference<typename Arg<F,2>::T>::type>::type a2;
541 typename remove_const<typename remove_reference<typename Arg<F,3>::T>::type>::type a3;
Definition functiondb3.h:293
Definition functiondb3.h:258
Definition functiondb3.h:275