1#ifndef CLASSDESC_FUNCTIONDB4
2#define CLASSDESC_FUNCTIONDB4
3template <
class R,
class A1,
class A2,
class A3,
class A4>
4struct Arg<R (*)(A1,A2,A3,A4), 1>
10template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
11struct Arg<R (C::*)(A1,A2,A3,A4), 1>
17template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
18struct Arg<R (C::*)(A1,A2,A3,A4) const, 1>
24#if defined(__cplusplus) && __cplusplus>=201703L
26template <
class R,
class A1,
class A2,
class A3,
class A4>
27struct Arg<R (*)(A1,A2,A3,A4)
noexcept, 1>
33template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
34struct Arg<R (C::*)(A1,A2,A3,A4) noexcept, 1>
40template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
41struct Arg<R (C::*)(A1,A2,A3,A4) const noexcept, 1>
47template <
class R,
class A1,
class A2,
class A3,
class A4>
48struct Arg<R (*)(A1,A2,A3,A4), 2>
54template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
55struct Arg<R (C::*)(A1,A2,A3,A4), 2>
61template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
62struct Arg<R (C::*)(A1,A2,A3,A4) const, 2>
68#if defined(__cplusplus) && __cplusplus>=201703L
70template <
class R,
class A1,
class A2,
class A3,
class A4>
71struct Arg<R (*)(A1,A2,A3,A4)
noexcept, 2>
77template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
78struct Arg<R (C::*)(A1,A2,A3,A4) noexcept, 2>
84template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
85struct Arg<R (C::*)(A1,A2,A3,A4) const noexcept, 2>
91template <
class R,
class A1,
class A2,
class A3,
class A4>
92struct Arg<R (*)(A1,A2,A3,A4), 3>
98template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
99struct Arg<R (C::*)(A1,A2,A3,A4), 3>
105template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
106struct Arg<R (C::*)(A1,A2,A3,A4) const, 3>
112#if defined(__cplusplus) && __cplusplus>=201703L
114template <
class R,
class A1,
class A2,
class A3,
class A4>
115struct Arg<R (*)(A1,A2,A3,A4)
noexcept, 3>
121template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
122struct Arg<R (C::*)(A1,A2,A3,A4) noexcept, 3>
128template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
129struct Arg<R (C::*)(A1,A2,A3,A4) const noexcept, 3>
135template <
class R,
class A1,
class A2,
class A3,
class A4>
136struct Arg<R (*)(A1,A2,A3,A4), 4>
142template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
143struct Arg<R (C::*)(A1,A2,A3,A4), 4>
149template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
150struct Arg<R (C::*)(A1,A2,A3,A4) const, 4>
156#if defined(__cplusplus) && __cplusplus>=201703L
158template <
class R,
class A1,
class A2,
class A3,
class A4>
159struct Arg<R (*)(A1,A2,A3,A4)
noexcept, 4>
165template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
166struct Arg<R (C::*)(A1,A2,A3,A4) noexcept, 4>
172template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
173struct Arg<R (C::*)(A1,A2,A3,A4) const noexcept, 4>
179template <
class F,
template<
class>
class P>
182 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 && P<typename Arg<F,4>::T>::value;
186template <
class R,
class A1,
class A2,
class A3,
class A4>
187struct Arity<R (*)(A1,A2,A3,A4)>
189 static const int V=4;
190 static const int value=4;
193template <
class R,
class A1,
class A2,
class A3,
class A4>
194struct Return<R (*)(A1,A2,A3,A4)>
200template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
201struct Arity<R (* C::*)(A1,A2,A3,A4)>
203 static const int V=4;
204 static const int value=4;
207template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
208struct Return<R (* C::*)(A1,A2,A3,A4)>
214template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
215struct Arity<R (C::*)(A1,A2,A3,A4)>
217 static const int V=4;
218 static const int value=4;
221template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
222struct Return<R (C::*)(A1,A2,A3,A4)>
228template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
229struct Arity<R (C::*)(A1,A2,A3,A4) const>
231 static const int V=4;
232 static const int value=4;
235template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
236struct Return<R (C::*)(A1,A2,A3,A4) const>
242template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
243struct ClassOf<R (C::*)(A1,A2,A3,A4)>
249template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
250struct ClassOf<R (*C::*)(A1,A2,A3,A4)>
256template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
257struct ClassOf<R (C::*)(A1,A2,A3,A4) const>
263template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
264struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4)>
266 static const bool value=
true;
269template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
270struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4) const>
272 static const bool value=
true;
275template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
276struct is_const_method<R (C::*)(A1,A2,A3,A4) const>
278 static const bool value=
true;
281template <
class R,
class A1,
class A2,
class A3,
class A4>
282struct is_nonmember_function_ptr<R (*)(A1,A2,A3,A4)>
284 static const bool value=
true;
287template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
288struct is_nonmember_function_ptr<R (*C::*)(A1,A2,A3,A4)>
290 static const bool value=
true;
293template <
class C,
class D,
class R,
class A1,
class A2,
class A3,
class A4>
294class bound_method<C, R (D::*)(A1,A2,A3,A4)>
296 typedef R (D::*M)(A1,A2,A3,A4);
300 static const int arity=4;
302 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
303 bound_method(C& obj, M method): obj(&obj), method(method) {}
304 typename enable_if<Not<classdesc::is_const<C> >, R>::T
305 operator()(A1 a1,A2 a2,A3 a3,A4 a4)
const {
return (obj->*method)(a1,a2,a3,a4);}
306 void rebind(C& newObj) {obj=&newObj;}
307 static const bool is_const=
false;
310template <
class C,
class D,
class R,
class A1,
class A2,
class A3,
class A4>
311class bound_method<const C, R (D::*)(A1,A2,A3,A4)>
313 typedef R (D::*M)(A1,A2,A3,A4);
317 static const int arity=4;
319 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
320 bound_method(
const C& obj, M method): obj(&obj), method(method) {}
321 R operator()(A1 a1,A2 a2,A3 a3,A4 a4)
const {
322 throw std::runtime_error(
"cannot call method, inappropriate argument type");
324 void rebind(C& newObj) {obj=&newObj;}
325 static const bool is_const=
false;
328template <
class C,
class D,
class R,
class A1,
class A2,
class A3,
class A4>
329class bound_method<C, R (D::*)(A1,A2,A3,A4) const>
331 typedef R (D::*M)(A1,A2,A3,A4)
const;
335 static const int arity=4;
337 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
338 bound_method(C& obj, M method): obj(obj), method(method) {}
339 R operator()(A1 a1,A2 a2,A3 a3,A4 a4)
const {
return (obj.*method)(a1,a2,a3,a4);}
340 static const bool is_const=
true;
343#if defined(__cplusplus) && __cplusplus>=201703L
346template <
class R,
class A1,
class A2,
class A3,
class A4>
347struct Arity<R (*)(A1,A2,A3,A4)
noexcept>
349 static const int V=4;
350 static const int value=4;
353template <
class R,
class A1,
class A2,
class A3,
class A4>
354struct Return<R (*)(A1,A2,A3,A4)
noexcept>
360template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
361struct Arity<R (* C::*)(A1,A2,A3,A4)
noexcept>
363 static const int V=4;
364 static const int value=4;
367template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
368struct Return<R (* C::*)(A1,A2,A3,A4)
noexcept>
374template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
375struct Arity<R (C::*)(A1,A2,A3,A4) noexcept>
377 static const int V=4;
378 static const int value=4;
381template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
382struct Return<R (C::*)(A1,A2,A3,A4) noexcept>
388template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
389struct Arity<R (C::*)(A1,A2,A3,A4) const noexcept>
391 static const int V=4;
392 static const int value=4;
395template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
396struct Return<R (C::*)(A1,A2,A3,A4) const noexcept>
402template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
403struct ClassOf<R (C::*)(A1,A2,A3,A4) noexcept>
409template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
410struct ClassOf<R (*C::*)(A1,A2,A3,A4)
noexcept>
416template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
417struct ClassOf<R (C::*)(A1,A2,A3,A4) const noexcept>
423template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
424struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4) noexcept>
426 static const bool value=
true;
429template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
430struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4) const noexcept>
432 static const bool value=
true;
435template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
436struct is_const_method<R (C::*)(A1,A2,A3,A4) const noexcept>
438 static const bool value=
true;
441template <
class R,
class A1,
class A2,
class A3,
class A4>
442struct is_nonmember_function_ptr<R (*)(A1,A2,A3,A4)
noexcept>
444 static const bool value=
true;
447template <
class C,
class R,
class A1,
class A2,
class A3,
class A4>
448struct is_nonmember_function_ptr<R (*C::*)(A1,A2,A3,A4)
noexcept>
450 static const bool value=
true;
453template <
class C,
class D,
class R,
class A1,
class A2,
class A3,
class A4>
454class bound_method<C, R (D::*)(A1,A2,A3,A4) noexcept>
456 typedef R (D::*M)(A1,A2,A3,A4);
460 static const int arity=4;
462 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
463 bound_method(C& obj, M method): obj(&obj), method(method) {}
464 typename enable_if<Not<classdesc::is_const<C> >, R>::T
465 operator()(A1 a1,A2 a2,A3 a3,A4 a4)
const {
return (obj->*method)(a1,a2,a3,a4);}
466 void rebind(C& newObj) {obj=&newObj;}
467 static const bool is_const=
false;
470template <
class C,
class D,
class A1,
class A2,
class A3,
class A4>
471class bound_method<C, void (D::*)(A1,A2,A3,A4) noexcept>
473 typedef void (D::*M)(A1,A2,A3,A4);
477 static const int arity=4;
479 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
480 bound_method(C& obj, M method): obj(&obj), method(method) {}
481 typename enable_if<Not<classdesc::is_const<C> > >::T
482 operator()(A1 a1,A2 a2,A3 a3,A4 a4)
const {(obj->*method)(a1,a2,a3,a4);}
483 void rebind(C& newObj) {obj=&newObj;}
484 static const bool is_const=
false;
487template <
class C,
class D,
class R,
class A1,
class A2,
class A3,
class A4>
488class bound_method<const C, R (D::*)(A1,A2,A3,A4) noexcept>
490 typedef R (D::*M)(A1,A2,A3,A4);
494 static const int arity=4;
496 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
497 bound_method(
const C& obj, M method): obj(&obj), method(method) {}
498 R operator()(A1 a1,A2 a2,A3 a3,A4 a4)
const {
499 throw std::runtime_error(
"cannot call method, inappropriate argument type");
501 void rebind(C& newObj) {obj=&newObj;}
502 static const bool is_const=
false;
505template <
class C,
class D,
class A1,
class A2,
class A3,
class A4>
506class bound_method<const C, void (D::*)(A1,A2,A3,A4) noexcept>
508 typedef void (D::*M)(A1,A2,A3,A4);
512 static const int arity=4;
514 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
515 bound_method(
const C& obj, M method): obj(&obj), method(method) {}
516 typename enable_if<Not<classdesc::is_const<C> > >::T
517 operator()(A1 a1,A2 a2,A3 a3,A4 a4)
const {
518 throw std::runtime_error(
"cannot call method, inappropriate argument type");
520 void rebind(C& newObj) {obj=&newObj;}
521 static const bool is_const=
false;
524template <
class C,
class D,
class R,
class A1,
class A2,
class A3,
class A4>
525class bound_method<C, R (D::*)(A1,A2,A3,A4) const noexcept>
527 typedef R (D::*M)(A1,A2,A3,A4)
const;
531 static const int arity=4;
533 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
534 bound_method(C& obj, M method): obj(obj), method(method) {}
535 R operator()(A1 a1,A2 a2,A3 a3,A4 a4)
const {
return (obj.*method)(a1,a2,a3,a4);}
536 static const bool is_const=
true;
539template <
class C,
class D,
class A1,
class A2,
class A3,
class A4>
540class bound_method<C, void (D::*)(A1,A2,A3,A4) const noexcept>
542 typedef void (D::*M)(A1,A2,A3,A4)
const;
546 static const int arity=4;
548 template <
int i>
struct Arg:
public functional::Arg<M,i> {};
549 bound_method(C& obj, M method): obj(obj), method(method) {}
550 void operator()(A1 a1,A2 a2,A3 a3,A4 a4)
const {(obj.*method)(a1,a2,a3,a4);}
551 static const bool is_const=
true;
555template <
class F,
class Args>
556typename enable_if<And<AllArgs<F, is_rvalue>, Eq<Arity<F>::value, 4> >,
557 typename Return<F>::T>::T
558apply_nonvoid_fn(F f, Args& a, Fdummy<F> dum=0)
560 return f(a[0],a[1],a[2],a[3]);
569template <
class F,
class Args>
570typename enable_if<And<AllArgs<F, is_rvalue>, Eq<Arity<F>::value, 4> >,
572apply_void_fn(F f, Args& a, Fdummy<F> dum=0)
574 f(a[0],a[1],a[2],a[3]);
577template <
class Buffer,
class F>
578typename enable_if<Eq<Arity<F>::value, 4>,
typename Return<F>::T>::T
579callOnBuffer(Buffer& buffer, F f)
581 typename remove_const<typename remove_reference<typename Arg<F,1>::T>::type>::type a1;
583 typename remove_const<typename remove_reference<typename Arg<F,2>::T>::type>::type a2;
585 typename remove_const<typename remove_reference<typename Arg<F,3>::T>::type>::type a3;
587 typename remove_const<typename remove_reference<typename Arg<F,4>::T>::type>::type a4;
Definition functiondb4.h:337
Definition functiondb4.h:302
Definition functiondb4.h:319