source: soft/giet_vm/memo/include/libelfpp/dpp/delegate @ 378

Last change on this file since 378 was 163, checked in by karaoui, 12 years ago

changing mover to memo
changing soft.bin to soft.elf
...

File size: 84.0 KB
Line 
1/* -*- c++ -*-
2
3   C++ delegate classes
4
5   This file is part of the dpp library of C++ template classes
6
7   doc: http://diaxen.ssji.net/dpp/index.html
8   repo: https://www.ssji.net/svn/projets/trunk/libdpp
9
10   This program is free software: you can redistribute it and/or
11   modify it under the terms of the GNU Lesser General Public License
12   as published by the Free Software Foundation, either version 3 of
13   the License, or (at your option) any later version.
14
15   This program is distributed in the hope that it will be useful, but
16   WITHOUT ANY WARRANTY; without even the implied warranty of
17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18   Lesser General Public License for more details.
19
20   You should have received a copy of the GNU Lesser General Public
21   License along with this program.  If not, see
22   <http://www.gnu.org/licenses/>.
23
24   (c) 2008-2011 Alexandre Becoulet <alexandre.becoulet@free.fr>
25
26*/
27
28#ifndef DPP_DELEGATE_HH_
29#define DPP_DELEGATE_HH_
30
31#include <iostream>
32
33/** @file @module{Delegates} */
34
35namespace dpp {
36
37#ifndef _DPP_DR106
38  /** @internal Workaround for c++ DR 106, strip reference */
39  template <class X>
40  struct _dr106
41  {
42    typedef X type;
43  };
44
45  /** @internal */
46  template <class X>
47  struct _dr106<X &>
48  {
49    typedef X type;
50  };
51
52  /** @internal */
53# define _DPP_DR106(x) typename _dr106<x>::type
54#endif
55
56  //////////////////////////////////////////////////////////////////////
57  //    delegate base class
58  //////////////////////////////////////////////////////////////////////
59
60  /**
61     @short Delegates base class
62     @main
63     @header dpp/delegate
64
65     All other classes in the @ref +Delegates module inherit from this
66     class. This enables passing delegates pointers and references to
67     functions in a generic and interchangeable manner.
68
69     Actual implementations for different parameters count are located
70     in class specializations.
71
72     Maximum number of arguments is defined by the @ref
73     #DPP_DELEGATE_ARGC macro.
74  */
75  template <typename prototype>
76  class delegate
77  {
78  };
79
80#ifndef DPP_DELEGATE_ARGC
81  /** @This defines maximum number of arguments handled by delegate
82      classes. It can be defined before inclusion of the header so
83      that class specialization declarations take place to handle up
84      to 8 arguments. The default value is 4. */
85# define DPP_DELEGATE_ARGC 4
86#endif
87
88#define _DPP_DELEGATE(n)                                \
89  template <typename R _DPP_DELEGATE_TARGS(n)>          \
90  class delegate < R (_DPP_DELEGATE_PARGS(n)) >         \
91  {                                                     \
92    virtual R call (_DPP_DELEGATE_CARGS(n)) const = 0;  \
93                                                        \
94  public:                                               \
95    _DPP_DELEGATE_TDEFS(n); /* args typedefs */         \
96    virtual bool valid() const = 0;                     \
97    virtual ~delegate() {}                              \
98                                                        \
99    R operator() (_DPP_DELEGATE_CARGS(n)) const         \
100    {                                                   \
101      return call (_DPP_DELEGATE_IARGS(n));             \
102    }                                                   \
103                                                        \
104  };
105
106  //////////////////////////////////////////////////////////////////////
107  //    function pointer delegate class
108  //////////////////////////////////////////////////////////////////////
109
110  /**
111     @short Function pointer delegate class
112     @main
113     @header dpp/delegate
114
115     This delegate class embeds a pointer to a global or static member
116     function.
117
118     Actual implementations for different parameters count are located
119     in class specializations.
120
121     Maximum number of handled arguments is controlled by the @ref
122     #DPP_DELEGATE_ARGC macro.
123
124     Usage example:
125     @example test/test_delegate.cc:func1
126     @example test/test_delegate.cc:func2
127
128     @see delegate_member
129     @see delegate_member_this
130  */
131  template <typename prototype>
132  class delegate_func : public delegate<prototype>
133  {
134  };
135
136#define _DPP_DELEGATE_FUNC(n)                                           \
137  template <typename R _DPP_DELEGATE_TARGS(n)>                          \
138  class delegate_func < R (_DPP_DELEGATE_PARGS(n)) >                    \
139    : public delegate< R (_DPP_DELEGATE_PARGS(n)) >                     \
140  {                                                                     \
141    typedef R prototype (_DPP_DELEGATE_PARGS(n));                       \
142                                                                        \
143  public:                                                               \
144    delegate_func()                                                     \
145      : _func(0)                                                        \
146      {                                                                 \
147      }                                                                 \
148                                                                        \
149    delegate_func(prototype *p)                                         \
150      : _func(p)                                                        \
151      {                                                                 \
152      }                                                                 \
153                                                                        \
154    bool valid() const                                                  \
155    {                                                                   \
156      return _func;                                                     \
157    }                                                                   \
158                                                                        \
159    R operator()(_DPP_DELEGATE_CARGS(n)) const                          \
160    {                                                                   \
161      return delegate_func::call (_DPP_DELEGATE_IARGS(n));              \
162    }                                                                   \
163                                                                        \
164  private:                                                              \
165                                                                        \
166    R call (_DPP_DELEGATE_CARGS(n)) const                               \
167    {                                                                   \
168      return _func (_DPP_DELEGATE_IARGS(n));                            \
169    }                                                                   \
170                                                                        \
171    prototype *_func;                                                   \
172  };
173
174  //////////////////////////////////////////////////////////////////////
175  //    member function pointer delegate classes
176  //////////////////////////////////////////////////////////////////////
177
178  /**
179     @short Member function pointer delegate class
180     @header dpp/delegate
181     @main
182
183     This delegate class embeds a pointer to an object and take a
184     member function to call as template argument.
185
186     Actual implementations for different parameters count are located
187     in class specializations.
188
189     Maximum number of handled arguments is controlled by the @ref
190     #DPP_DELEGATE_ARGC macro.
191
192     Usage example:
193     @example test/test_delegate.cc:member1
194     @example test/test_delegate.cc:member2
195
196     Delegate with @tt const member function type is only supported by
197     gcc 4.4 and clang compilers.
198
199     @see delegate_member_this
200     @see delegate_func
201  */
202  template <class O, typename prototype, prototype O::*F>
203  class delegate_member : public delegate<prototype>
204  {
205  };
206
207#define _DPP_DELEGATE_MEMBER_(n, cst)                                   \
208  template <class O, typename R _DPP_DELEGATE_TARGS(n),                 \
209            R (O::*F)(_DPP_DELEGATE_PARGS(n)) cst >                     \
210  class delegate_member < O, R (_DPP_DELEGATE_PARGS(n)) cst, F >        \
211    : public delegate< R (_DPP_DELEGATE_PARGS(n)) >                     \
212  {                                                                     \
213  public:                                                               \
214                                                                        \
215    delegate_member()                                                   \
216      : _obj(0)                                                         \
217      {                                                                 \
218      }                                                                 \
219                                                                        \
220    delegate_member(O &obj)                                             \
221      : _obj(&obj)                                                      \
222      {                                                                 \
223      }                                                                 \
224                                                                        \
225    bool valid() const                                                  \
226    {                                                                   \
227      return _obj;                                                      \
228    }                                                                   \
229                                                                        \
230    R operator()(_DPP_DELEGATE_CARGS(n)) const                          \
231    {                                                                   \
232      return delegate_member::call(_DPP_DELEGATE_IARGS(n));             \
233    }                                                                   \
234                                                                        \
235  private:                                                              \
236    R call (_DPP_DELEGATE_CARGS(n)) const                               \
237    {                                                                   \
238      return (_obj->*F)(_DPP_DELEGATE_IARGS(n));                        \
239    }                                                                   \
240                                                                        \
241    O *_obj;                                                            \
242  };
243
244#if ((__GNUC__ == 4 && __GNUC_MINOR__ >= 4) || (__GNUC__ > 4)) && !defined(__INTEL_COMPILER)
245# define _DPP_DELEGATE_MEMBER(n)                \
246  _DPP_DELEGATE_MEMBER_(n,)                     \
247  _DPP_DELEGATE_MEMBER_(n, const)
248#else
249# define _DPP_DELEGATE_MEMBER(n)                \
250  _DPP_DELEGATE_MEMBER_(n,)             
251#endif
252
253  /** @internal contains typedef with prototype without first argument */
254  template <typename prototype>
255  struct delegate_member_this_pm1
256  {
257  };
258
259  /** @internal */
260  template <typename A>
261  struct _delegate_member_this_ptr
262  {
263    static A & get(A &a)
264    {
265      return a;
266    }
267  };
268
269  /** @internal */
270  template <typename A>
271  struct _delegate_member_this_ptr<A *>
272  {
273    static A & get(A *a)
274    {
275      return *a;
276    }
277  };
278
279  /** @internal */
280  template <typename A>
281  struct _delegate_member_this_type { typedef A t; };
282  /** @internal */
283  template <typename A>
284  struct _delegate_member_this_type<A *> { typedef A t; };
285  /** @internal */
286  template <typename A>
287  struct _delegate_member_this_type<A &> { typedef A t; };
288
289  /**
290     @short Member function pointer delegate class
291     @header dpp/delegate
292     @prototype template <typename prototype, prototype_without_1st_arg O::*F>
293     @main
294
295     This delegate takes a member function to call as template
296     argument and invoke this function on object passed as first
297     delegate argument. Object argument may be a reference or a pointer.
298
299     Actual implementations for different parameters count are located
300     in class specializations.
301
302     Maximum number of handled arguments is controlled by the @ref
303     #DPP_DELEGATE_ARGC macro.
304
305     Usage example:
306     @example test/test_delegate.cc:member1
307     Use with reference argument:
308     @example test/test_delegate.cc:member_arg
309     Use with pointer argument:
310     @example test/test_delegate.cc:member_arg2
311
312     Delegate with @tt const member function type is only supported by
313     gcc 4.4 and clang compilers.
314
315     @see delegate_member
316     @see delegate_func
317   */
318  template <typename prototype, typename delegate_member_this_pm1<prototype>::p
319             (_delegate_member_this_type<typename delegate_member_this_pm1<prototype>::a0_t>::t::*F)>
320  class delegate_member_this : public delegate<prototype>
321  {
322  };
323
324
325#define _DPP_DELEGATE_MEMBER_THIS_(n, cst)                              \
326                                                                        \
327  /** @internal */                                                      \
328  template <typename R _DPP_DELEGATE_TARGS(n) >                         \
329  struct delegate_member_this_pm1 < R (_DPP_DELEGATE_PARGS(n)) cst >    \
330  {                                                                     \
331    typedef A0 a0_t;                                                    \
332    typedef R p(_DPP_DELEGATE_PARGS_NOT0(n)) cst;                       \
333  };                                                                    \
334                                                                        \
335  template <typename R _DPP_DELEGATE_TARGS(n),                          \
336            R (_delegate_member_this_type<A0>::t::*F)                   \
337              (_DPP_DELEGATE_PARGS_NOT0(n)) cst >                       \
338  class delegate_member_this < R (_DPP_DELEGATE_PARGS(n)) cst, F >      \
339    : public delegate< R (_DPP_DELEGATE_PARGS(n)) >                     \
340  {                                                                     \
341  public:                                                               \
342                                                                        \
343    bool valid() const                                                  \
344    {                                                                   \
345      return true;                                                      \
346    }                                                                   \
347                                                                        \
348    R operator()(_DPP_DELEGATE_CARGS(n)) const                          \
349    {                                                                   \
350      return delegate_member_this::call(_DPP_DELEGATE_IARGS(n));                \
351    }                                                                   \
352                                                                        \
353  private:                                                              \
354    R call (_DPP_DELEGATE_CARGS(n)) const                               \
355    {                                                                   \
356      return (_delegate_member_this_ptr<A0>::get(a0)                    \
357              .*F)(_DPP_DELEGATE_IARGS_NOT0(n));                        \
358    }                                                                   \
359  };
360
361#if ((__GNUC__ == 4 && __GNUC_MINOR__ >= 4) || (__GNUC__ > 4)) && !defined(__INTEL_COMPILER)
362#define _DPP_DELEGATE_MEMBER_THIS(n)                    \
363  _DPP_DELEGATE_MEMBER_THIS_(n,)                        \
364  _DPP_DELEGATE_MEMBER_THIS_(n, const)
365#else
366#define _DPP_DELEGATE_MEMBER_THIS(n)                    \
367  _DPP_DELEGATE_MEMBER_THIS_(n,)                       
368#endif
369
370  //////////////////////////////////////////////////////////////////////
371  //    delegate bind class
372  //////////////////////////////////////////////////////////////////////
373
374  /** Specify delegate argument positions. */
375  enum delegate_args_mask_e {
376    arg1st = 1,
377    arg2nd = 2,
378    arg3rd = 4,
379    arg4th = 8,
380    arg5th = 16,
381    arg6th = 32,
382    arg7th = 64,
383    arg8th = 128
384  };
385
386  /**
387     @short Parameter bind delegate class
388     @main
389     @header dpp/delegate
390
391     This delegate class can be used to bind some parameters of an
392     other delegate to fixed values.
393
394     Actual implementations for different parameters configurations
395     are located in class specializations.
396
397     Maximum number of handled arguments is controlled by the @ref
398     #DPP_DELEGATE_ARGC macro.
399
400     Usage example:
401     @example test/test_delegate.cc:bind1
402     @example test/test_delegate.cc:bind2
403
404     @see delegate_args_mask_e
405  */
406  template <typename base, typename prototype, int args_mask>
407  class delegate_bind : public delegate<prototype>
408  {
409  };
410
411#define _DPP_DELEGATE_BIND(args_mask, n, m, tdefs, ...)                 \
412  /** @hidden */                                                        \
413  template <typename base, typename R _DPP_DELEGATE_TARGS(n)>           \
414  class delegate_bind < base, R (_DPP_DELEGATE_PARGS(n)), args_mask >   \
415    : public delegate< R (_DPP_DELEGATE_PARGS(n)) >                     \
416  {                                                                     \
417    typedef R prototype(_DPP_DELEGATE_PARGS(n));                        \
418    tdefs;                                                              \
419                                                                        \
420  public:                                                               \
421    delegate_bind(const base &b _DPP_DELEGATE_BCARGS(m))                \
422      : _base(b) _DPP_DELEGATE_BCSTR(m)                                 \
423        {                                                               \
424        }                                                               \
425                                                                        \
426    bool valid() const                                                  \
427    {                                                                   \
428      return _base.valid();                                             \
429    }                                                                   \
430                                                                        \
431    R operator()(_DPP_DELEGATE_CARGS(n)) const                          \
432    {                                                                   \
433      return delegate_bind::call(_DPP_DELEGATE_IARGS(n));               \
434    }                                                                   \
435                                                                        \
436  private:                                                              \
437                                                                        \
438    R call(_DPP_DELEGATE_CARGS(n)) const                                \
439    {                                                                   \
440      return _base(__VA_ARGS__);                                        \
441    }                                                                   \
442                                                                        \
443    const base &_base;                                                  \
444    _DPP_DELEGATE_BFIELD(m);                                            \
445  };
446
447  //////////////////////////////////////////////////////////////////////
448  //    template specializations for multiple parameters configurations
449  //////////////////////////////////////////////////////////////////////
450
451#define _DPP_DELEGATE_CM ,
452#define _DPP_DELEGATE_SC ;
453#define _DPP_DELEGATE_SP
454
455#define _DPP_DELEGATE_N0(sep, _1, _2, _3, _4, _5, _6, _7, _8)
456
457#define _DPP_DELEGATE_N1(sep, _1, _2, _3, _4, _5, _6, _7, _8) _1
458#define _DPP_DELEGATE_N1_M1(...) _DPP_DELEGATE_N0(__VA_ARGS__)
459
460#define _DPP_DELEGATE_N2(sep, _1, _2, _3, _4, _5, _6, _7, _8)   \
461  _1 _DPP_DELEGATE_##sep _2
462#define _DPP_DELEGATE_N2_M1(...) _DPP_DELEGATE_N1(__VA_ARGS__)
463
464#define _DPP_DELEGATE_N3(sep, _1, _2, _3, _4, _5, _6, _7, _8)   \
465  _1 _DPP_DELEGATE_##sep _2 _DPP_DELEGATE_##sep _3
466#define _DPP_DELEGATE_N3_M1(...) _DPP_DELEGATE_N2(__VA_ARGS__)
467
468#define _DPP_DELEGATE_N4(sep, _1, _2, _3, _4, _5, _6, _7, _8)   \
469  _1 _DPP_DELEGATE_##sep _2 _DPP_DELEGATE_##sep                 \
470  _3 _DPP_DELEGATE_##sep _4
471#define _DPP_DELEGATE_N4_M1(...) _DPP_DELEGATE_N3(__VA_ARGS__)
472
473#define _DPP_DELEGATE_N5(sep, _1, _2, _3, _4, _5, _6, _7, _8)           \
474  _1 _DPP_DELEGATE_##sep _2 _DPP_DELEGATE_##sep _3 _DPP_DELEGATE_##sep  \
475  _4 _DPP_DELEGATE_##sep _5
476#define _DPP_DELEGATE_N5_M1(...) _DPP_DELEGATE_N4(__VA_ARGS__)
477
478#define _DPP_DELEGATE_N6(sep, _1, _2, _3, _4, _5, _6, _7, _8)           \
479  _1 _DPP_DELEGATE_##sep _2 _DPP_DELEGATE_##sep _3 _DPP_DELEGATE_##sep  \
480  _4 _DPP_DELEGATE_##sep _5 _DPP_DELEGATE_##sep _6
481#define _DPP_DELEGATE_N6_M1(...) _DPP_DELEGATE_N5(__VA_ARGS__)
482
483#define _DPP_DELEGATE_N7(sep, _1, _2, _3, _4, _5, _6, _7, _8)           \
484  _1 _DPP_DELEGATE_##sep _2 _DPP_DELEGATE_##sep _3 _DPP_DELEGATE_##sep  \
485  _4 _DPP_DELEGATE_##sep _5 _DPP_DELEGATE_##sep _6 _DPP_DELEGATE_##sep _7
486#define _DPP_DELEGATE_N7_M1(...) _DPP_DELEGATE_N6(__VA_ARGS__)
487
488#define _DPP_DELEGATE_N8(sep, _1, _2, _3, _4, _5, _6, _7, _8)           \
489  _1 _DPP_DELEGATE_##sep _2 _DPP_DELEGATE_##sep _3 _DPP_DELEGATE_##sep  \
490  _4 _DPP_DELEGATE_##sep _5 _DPP_DELEGATE_##sep _6 _DPP_DELEGATE_##sep  \
491  _7 _DPP_DELEGATE_##sep _8
492#define _DPP_DELEGATE_N8_M1(...) _DPP_DELEGATE_N7(__VA_ARGS__)
493
494#define _DPP_DELEGATE_PARGS(n)                                  \
495  _DPP_DELEGATE_N##n(CM, A0, A1, A2, A3, A4, A5, A6, A7)
496
497#define _DPP_DELEGATE_PARGS_NOT0(n)                             \
498  _DPP_DELEGATE_N##n##_M1(CM, A1, A2, A3, A4, A5, A6, A7, )
499
500#define _DPP_DELEGATE_IARGS(n)                                  \
501  _DPP_DELEGATE_N##n(CM, a0, a1, a2, a3, a4, a5, a6, a7)
502
503#define _DPP_DELEGATE_IARGS_NOT0(n)                             \
504  _DPP_DELEGATE_N##n##_M1(CM, a1, a2, a3, a4, a5, a6, a7, )
505
506#define _DPP_DELEGATE_CARGS(n)                          \
507  _DPP_DELEGATE_N##n(CM, A0 a0, A1 a1, A2 a2, A3 a3,    \
508                     A4 a4, A5 a5, A6 a6, A7 a7)
509
510#define _DPP_DELEGATE_TDEFS(n)                                  \
511  _DPP_DELEGATE_N##n(SC, typedef A0 a0_t, typedef A1 a1_t,      \
512                     typedef A2 a2_t, typedef A3 a3_t,          \
513                     typedef A4 a4_t, typedef A5 a5_t,          \
514                     typedef A6 a6_t, typedef A7 a7_t) ;
515
516#define _DPP_DELEGATE_TDEFS(n)                                  \
517  _DPP_DELEGATE_N##n(SC, typedef A0 a0_t, typedef A1 a1_t,      \
518                     typedef A2 a2_t, typedef A3 a3_t,          \
519                     typedef A4 a4_t, typedef A5 a5_t,          \
520                     typedef A6 a6_t, typedef A7 a7_t) ;
521
522#define _DPP_DELEGATE_TARGS(n)                              \
523  _DPP_DELEGATE_N##n(SP,_DPP_DELEGATE_CM,,,,,,,)            \
524  _DPP_DELEGATE_N##n(CM, typename A0, typename A1,          \
525                     typename A2, typename A3,              \
526                     typename A4, typename A5,              \
527                     typename A6, typename A7)
528
529#define _DPP_DELEGATE_BCARGS(n)                         \
530  _DPP_DELEGATE_N##n(SP,_DPP_DELEGATE_CM,,,,,,,)                \
531  _DPP_DELEGATE_N##n(CM, B0 a0, B1 a1, B2 a2, B3 a3,    \
532                     B4 a4, B5 a5, B6 a6, B7 a7)
533
534#define _DPP_DELEGATE_BCSTR(n)                                  \
535  _DPP_DELEGATE_N##n(SP,_DPP_DELEGATE_CM,,,,,,,)                \
536  _DPP_DELEGATE_N##n(CM, _a0(a0), _a1(a1), _a2(a2), _a3(a3),    \
537                     _a4(a4), _a5(a5), _a6(a6), _a7(a7))
538
539#define _DPP_DELEGATE_BFIELD(n)                                 \
540  _DPP_DELEGATE_N##n(SC, B0 _a0, B1 _a1, B2 _a2, B3 _a3,        \
541                     B4 _a4, B5 _a5, B6 _a6, B7 _a7)
542
543#define _DPP_DELEGATE_BTDEFS_(n, _1a, _2a, _3a, _4a, \
544                              _5a, _6a, _7a, _8a, ...) \
545  _DPP_DELEGATE_N##n(SC,                                        \
546    typedef typename base::a##_1a##_t B0,                       \
547    typedef typename base::a##_2a##_t B1,                       \
548    typedef typename base::a##_3a##_t B2,                       \
549    typedef typename base::a##_4a##_t B3,                       \
550    typedef typename base::a##_5a##_t B4,                       \
551    typedef typename base::a##_6a##_t B5,                       \
552    typedef typename base::a##_7a##_t B6,                       \
553    typedef typename base::a##_8a##_t B7)
554
555#define _DPP_DELEGATE_BTDEFS(n, ...) _DPP_DELEGATE_BTDEFS_(n, __VA_ARGS__,,,,,,,,,)
556
557#if DPP_DELEGATE_ARGC >= 0
558  _DPP_DELEGATE(0)
559  _DPP_DELEGATE_FUNC(0)
560  _DPP_DELEGATE_MEMBER(0)
561#endif
562
563#if DPP_DELEGATE_ARGC >= 1
564  _DPP_DELEGATE(1)
565  _DPP_DELEGATE_FUNC(1)
566  _DPP_DELEGATE_MEMBER(1)
567  _DPP_DELEGATE_MEMBER_THIS(1)
568  _DPP_DELEGATE_BIND(1, 0, 1, _DPP_DELEGATE_BTDEFS(1, 0), _a0);
569#endif
570
571#if DPP_DELEGATE_ARGC >= 2
572  _DPP_DELEGATE(2)
573  _DPP_DELEGATE_FUNC(2)
574  _DPP_DELEGATE_MEMBER(2)
575  _DPP_DELEGATE_MEMBER_THIS(2)
576  _DPP_DELEGATE_BIND(1, 1, 1, _DPP_DELEGATE_BTDEFS(1, 0), _a0, a0);
577  _DPP_DELEGATE_BIND(2, 1, 1, _DPP_DELEGATE_BTDEFS(1, 1), a0, _a0);
578  _DPP_DELEGATE_BIND(3, 0, 2, _DPP_DELEGATE_BTDEFS(2, 0, 1), _a0, _a1);
579#endif
580
581#if DPP_DELEGATE_ARGC >= 3
582  _DPP_DELEGATE(3)
583  _DPP_DELEGATE_FUNC(3)
584  _DPP_DELEGATE_MEMBER(3)
585  _DPP_DELEGATE_MEMBER_THIS(3)
586  _DPP_DELEGATE_BIND(1, 2, 1, _DPP_DELEGATE_BTDEFS(1, 0), _a0, a0, a1);
587  _DPP_DELEGATE_BIND(2, 2, 1, _DPP_DELEGATE_BTDEFS(1, 1), a0, _a0, a1);
588  _DPP_DELEGATE_BIND(3, 1, 2, _DPP_DELEGATE_BTDEFS(2, 0, 1), _a0, _a1, a0);
589  _DPP_DELEGATE_BIND(4, 2, 1, _DPP_DELEGATE_BTDEFS(1, 2), a0, a1, _a0);
590  _DPP_DELEGATE_BIND(5, 1, 2, _DPP_DELEGATE_BTDEFS(2, 0, 2), _a0, a0, _a1);
591  _DPP_DELEGATE_BIND(6, 1, 2, _DPP_DELEGATE_BTDEFS(2, 1, 2), a0, _a0, _a1);
592  _DPP_DELEGATE_BIND(7, 0, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 2), _a0, _a1, _a2);
593#endif
594
595#if DPP_DELEGATE_ARGC >= 4
596  _DPP_DELEGATE(4)
597  _DPP_DELEGATE_FUNC(4)
598  _DPP_DELEGATE_MEMBER(4)
599  _DPP_DELEGATE_MEMBER_THIS(4)
600  _DPP_DELEGATE_BIND(1, 3, 1, _DPP_DELEGATE_BTDEFS(1, 0), _a0, a0, a1, a2);
601  _DPP_DELEGATE_BIND(2, 3, 1, _DPP_DELEGATE_BTDEFS(1, 1), a0, _a0, a1, a2);
602  _DPP_DELEGATE_BIND(3, 2, 2, _DPP_DELEGATE_BTDEFS(2, 0, 1), _a0, _a1, a0, a1);
603  _DPP_DELEGATE_BIND(4, 3, 1, _DPP_DELEGATE_BTDEFS(1, 2), a0, a1, _a0, a2);
604  _DPP_DELEGATE_BIND(5, 2, 2, _DPP_DELEGATE_BTDEFS(2, 0, 2), _a0, a0, _a1, a1);
605  _DPP_DELEGATE_BIND(6, 2, 2, _DPP_DELEGATE_BTDEFS(2, 1, 2), a0, _a0, _a1, a1);
606  _DPP_DELEGATE_BIND(7, 1, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 2), _a0, _a1, _a2, a0);
607  _DPP_DELEGATE_BIND(8, 3, 1, _DPP_DELEGATE_BTDEFS(1, 3), a0, a1, a2, _a0);
608  _DPP_DELEGATE_BIND(9, 2, 2, _DPP_DELEGATE_BTDEFS(2, 0, 3), _a0, a0, a1, _a1);
609  _DPP_DELEGATE_BIND(10, 2, 2, _DPP_DELEGATE_BTDEFS(2, 1, 3), a0, _a0, a1, _a1);
610  _DPP_DELEGATE_BIND(11, 1, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 3), _a0, _a1, a0, _a2);
611  _DPP_DELEGATE_BIND(12, 2, 2, _DPP_DELEGATE_BTDEFS(2, 2, 3), a0, a1, _a0, _a1);
612  _DPP_DELEGATE_BIND(13, 1, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 3), _a0, a0, _a1, _a2);
613  _DPP_DELEGATE_BIND(14, 1, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 3), a0, _a0, _a1, _a2);
614  _DPP_DELEGATE_BIND(15, 0, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 3), _a0, _a1, _a2, _a3);
615#endif
616
617#if DPP_DELEGATE_ARGC >= 5 // mkdoc:skip
618  _DPP_DELEGATE(5)
619  _DPP_DELEGATE_FUNC(5)
620  _DPP_DELEGATE_MEMBER(5)
621  _DPP_DELEGATE_MEMBER_THIS(5)
622  _DPP_DELEGATE_BIND(1, 4, 1, _DPP_DELEGATE_BTDEFS(1, 0), _a0, a0, a1, a2, a3);
623  _DPP_DELEGATE_BIND(2, 4, 1, _DPP_DELEGATE_BTDEFS(1, 1), a0, _a0, a1, a2, a3);
624  _DPP_DELEGATE_BIND(3, 3, 2, _DPP_DELEGATE_BTDEFS(2, 0, 1), _a0, _a1, a0, a1, a2);
625  _DPP_DELEGATE_BIND(4, 4, 1, _DPP_DELEGATE_BTDEFS(1, 2), a0, a1, _a0, a2, a3);
626  _DPP_DELEGATE_BIND(5, 3, 2, _DPP_DELEGATE_BTDEFS(2, 0, 2), _a0, a0, _a1, a1, a2);
627  _DPP_DELEGATE_BIND(6, 3, 2, _DPP_DELEGATE_BTDEFS(2, 1, 2), a0, _a0, _a1, a1, a2);
628  _DPP_DELEGATE_BIND(7, 2, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 2), _a0, _a1, _a2, a0, a1);
629  _DPP_DELEGATE_BIND(8, 4, 1, _DPP_DELEGATE_BTDEFS(1, 3), a0, a1, a2, _a0, a3);
630  _DPP_DELEGATE_BIND(9, 3, 2, _DPP_DELEGATE_BTDEFS(2, 0, 3), _a0, a0, a1, _a1, a2);
631  _DPP_DELEGATE_BIND(10, 3, 2, _DPP_DELEGATE_BTDEFS(2, 1, 3), a0, _a0, a1, _a1, a2);
632  _DPP_DELEGATE_BIND(11, 2, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 3), _a0, _a1, a0, _a2, a1);
633  _DPP_DELEGATE_BIND(12, 3, 2, _DPP_DELEGATE_BTDEFS(2, 2, 3), a0, a1, _a0, _a1, a2);
634  _DPP_DELEGATE_BIND(13, 2, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 3), _a0, a0, _a1, _a2, a1);
635  _DPP_DELEGATE_BIND(14, 2, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 3), a0, _a0, _a1, _a2, a1);
636  _DPP_DELEGATE_BIND(15, 1, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 3), _a0, _a1, _a2, _a3, a0);
637  _DPP_DELEGATE_BIND(16, 4, 1, _DPP_DELEGATE_BTDEFS(1, 4), a0, a1, a2, a3, _a0);
638  _DPP_DELEGATE_BIND(17, 3, 2, _DPP_DELEGATE_BTDEFS(2, 0, 4), _a0, a0, a1, a2, _a1);
639  _DPP_DELEGATE_BIND(18, 3, 2, _DPP_DELEGATE_BTDEFS(2, 1, 4), a0, _a0, a1, a2, _a1);
640  _DPP_DELEGATE_BIND(19, 2, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 4), _a0, _a1, a0, a1, _a2);
641  _DPP_DELEGATE_BIND(20, 3, 2, _DPP_DELEGATE_BTDEFS(2, 2, 4), a0, a1, _a0, a2, _a1);
642  _DPP_DELEGATE_BIND(21, 2, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 4), _a0, a0, _a1, a1, _a2);
643  _DPP_DELEGATE_BIND(22, 2, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 4), a0, _a0, _a1, a1, _a2);
644  _DPP_DELEGATE_BIND(23, 1, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 4), _a0, _a1, _a2, a0, _a3);
645  _DPP_DELEGATE_BIND(24, 3, 2, _DPP_DELEGATE_BTDEFS(2, 3, 4), a0, a1, a2, _a0, _a1);
646  _DPP_DELEGATE_BIND(25, 2, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 4), _a0, a0, a1, _a1, _a2);
647  _DPP_DELEGATE_BIND(26, 2, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 4), a0, _a0, a1, _a1, _a2);
648  _DPP_DELEGATE_BIND(27, 1, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 4), _a0, _a1, a0, _a2, _a3);
649  _DPP_DELEGATE_BIND(28, 2, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 4), a0, a1, _a0, _a1, _a2);
650  _DPP_DELEGATE_BIND(29, 1, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 4), _a0, a0, _a1, _a2, _a3);
651  _DPP_DELEGATE_BIND(30, 1, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 4), a0, _a0, _a1, _a2, _a3);
652  _DPP_DELEGATE_BIND(31, 0, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 4), _a0, _a1, _a2, _a3, _a4);
653#endif
654
655#if DPP_DELEGATE_ARGC >= 6 // mkdoc:skip
656  _DPP_DELEGATE(6)
657  _DPP_DELEGATE_FUNC(6)
658  _DPP_DELEGATE_MEMBER(6)
659  _DPP_DELEGATE_MEMBER_THIS(6)
660  _DPP_DELEGATE_BIND(1, 5, 1, _DPP_DELEGATE_BTDEFS(1, 0), _a0, a0, a1, a2, a3, a4);
661  _DPP_DELEGATE_BIND(2, 5, 1, _DPP_DELEGATE_BTDEFS(1, 1), a0, _a0, a1, a2, a3, a4);
662  _DPP_DELEGATE_BIND(3, 4, 2, _DPP_DELEGATE_BTDEFS(2, 0, 1), _a0, _a1, a0, a1, a2, a3);
663  _DPP_DELEGATE_BIND(4, 5, 1, _DPP_DELEGATE_BTDEFS(1, 2), a0, a1, _a0, a2, a3, a4);
664  _DPP_DELEGATE_BIND(5, 4, 2, _DPP_DELEGATE_BTDEFS(2, 0, 2), _a0, a0, _a1, a1, a2, a3);
665  _DPP_DELEGATE_BIND(6, 4, 2, _DPP_DELEGATE_BTDEFS(2, 1, 2), a0, _a0, _a1, a1, a2, a3);
666  _DPP_DELEGATE_BIND(7, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 2), _a0, _a1, _a2, a0, a1, a2);
667  _DPP_DELEGATE_BIND(8, 5, 1, _DPP_DELEGATE_BTDEFS(1, 3), a0, a1, a2, _a0, a3, a4);
668  _DPP_DELEGATE_BIND(9, 4, 2, _DPP_DELEGATE_BTDEFS(2, 0, 3), _a0, a0, a1, _a1, a2, a3);
669  _DPP_DELEGATE_BIND(10, 4, 2, _DPP_DELEGATE_BTDEFS(2, 1, 3), a0, _a0, a1, _a1, a2, a3);
670  _DPP_DELEGATE_BIND(11, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 3), _a0, _a1, a0, _a2, a1, a2);
671  _DPP_DELEGATE_BIND(12, 4, 2, _DPP_DELEGATE_BTDEFS(2, 2, 3), a0, a1, _a0, _a1, a2, a3);
672  _DPP_DELEGATE_BIND(13, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 3), _a0, a0, _a1, _a2, a1, a2);
673  _DPP_DELEGATE_BIND(14, 3, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 3), a0, _a0, _a1, _a2, a1, a2);
674  _DPP_DELEGATE_BIND(15, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 3), _a0, _a1, _a2, _a3, a0, a1);
675  _DPP_DELEGATE_BIND(16, 5, 1, _DPP_DELEGATE_BTDEFS(1, 4), a0, a1, a2, a3, _a0, a4);
676  _DPP_DELEGATE_BIND(17, 4, 2, _DPP_DELEGATE_BTDEFS(2, 0, 4), _a0, a0, a1, a2, _a1, a3);
677  _DPP_DELEGATE_BIND(18, 4, 2, _DPP_DELEGATE_BTDEFS(2, 1, 4), a0, _a0, a1, a2, _a1, a3);
678  _DPP_DELEGATE_BIND(19, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 4), _a0, _a1, a0, a1, _a2, a2);
679  _DPP_DELEGATE_BIND(20, 4, 2, _DPP_DELEGATE_BTDEFS(2, 2, 4), a0, a1, _a0, a2, _a1, a3);
680  _DPP_DELEGATE_BIND(21, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 4), _a0, a0, _a1, a1, _a2, a2);
681  _DPP_DELEGATE_BIND(22, 3, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 4), a0, _a0, _a1, a1, _a2, a2);
682  _DPP_DELEGATE_BIND(23, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 4), _a0, _a1, _a2, a0, _a3, a1);
683  _DPP_DELEGATE_BIND(24, 4, 2, _DPP_DELEGATE_BTDEFS(2, 3, 4), a0, a1, a2, _a0, _a1, a3);
684  _DPP_DELEGATE_BIND(25, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 4), _a0, a0, a1, _a1, _a2, a2);
685  _DPP_DELEGATE_BIND(26, 3, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 4), a0, _a0, a1, _a1, _a2, a2);
686  _DPP_DELEGATE_BIND(27, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 4), _a0, _a1, a0, _a2, _a3, a1);
687  _DPP_DELEGATE_BIND(28, 3, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 4), a0, a1, _a0, _a1, _a2, a2);
688  _DPP_DELEGATE_BIND(29, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 4), _a0, a0, _a1, _a2, _a3, a1);
689  _DPP_DELEGATE_BIND(30, 2, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 4), a0, _a0, _a1, _a2, _a3, a1);
690  _DPP_DELEGATE_BIND(31, 1, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 4), _a0, _a1, _a2, _a3, _a4, a0);
691  _DPP_DELEGATE_BIND(32, 5, 1, _DPP_DELEGATE_BTDEFS(1, 5), a0, a1, a2, a3, a4, _a0);
692  _DPP_DELEGATE_BIND(33, 4, 2, _DPP_DELEGATE_BTDEFS(2, 0, 5), _a0, a0, a1, a2, a3, _a1);
693  _DPP_DELEGATE_BIND(34, 4, 2, _DPP_DELEGATE_BTDEFS(2, 1, 5), a0, _a0, a1, a2, a3, _a1);
694  _DPP_DELEGATE_BIND(35, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 5), _a0, _a1, a0, a1, a2, _a2);
695  _DPP_DELEGATE_BIND(36, 4, 2, _DPP_DELEGATE_BTDEFS(2, 2, 5), a0, a1, _a0, a2, a3, _a1);
696  _DPP_DELEGATE_BIND(37, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 5), _a0, a0, _a1, a1, a2, _a2);
697  _DPP_DELEGATE_BIND(38, 3, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 5), a0, _a0, _a1, a1, a2, _a2);
698  _DPP_DELEGATE_BIND(39, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 5), _a0, _a1, _a2, a0, a1, _a3);
699  _DPP_DELEGATE_BIND(40, 4, 2, _DPP_DELEGATE_BTDEFS(2, 3, 5), a0, a1, a2, _a0, a3, _a1);
700  _DPP_DELEGATE_BIND(41, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 5), _a0, a0, a1, _a1, a2, _a2);
701  _DPP_DELEGATE_BIND(42, 3, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 5), a0, _a0, a1, _a1, a2, _a2);
702  _DPP_DELEGATE_BIND(43, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 5), _a0, _a1, a0, _a2, a1, _a3);
703  _DPP_DELEGATE_BIND(44, 3, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 5), a0, a1, _a0, _a1, a2, _a2);
704  _DPP_DELEGATE_BIND(45, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 5), _a0, a0, _a1, _a2, a1, _a3);
705  _DPP_DELEGATE_BIND(46, 2, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 5), a0, _a0, _a1, _a2, a1, _a3);
706  _DPP_DELEGATE_BIND(47, 1, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 5), _a0, _a1, _a2, _a3, a0, _a4);
707  _DPP_DELEGATE_BIND(48, 4, 2, _DPP_DELEGATE_BTDEFS(2, 4, 5), a0, a1, a2, a3, _a0, _a1);
708  _DPP_DELEGATE_BIND(49, 3, 3, _DPP_DELEGATE_BTDEFS(3, 0, 4, 5), _a0, a0, a1, a2, _a1, _a2);
709  _DPP_DELEGATE_BIND(50, 3, 3, _DPP_DELEGATE_BTDEFS(3, 1, 4, 5), a0, _a0, a1, a2, _a1, _a2);
710  _DPP_DELEGATE_BIND(51, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 4, 5), _a0, _a1, a0, a1, _a2, _a3);
711  _DPP_DELEGATE_BIND(52, 3, 3, _DPP_DELEGATE_BTDEFS(3, 2, 4, 5), a0, a1, _a0, a2, _a1, _a2);
712  _DPP_DELEGATE_BIND(53, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 4, 5), _a0, a0, _a1, a1, _a2, _a3);
713  _DPP_DELEGATE_BIND(54, 2, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 4, 5), a0, _a0, _a1, a1, _a2, _a3);
714  _DPP_DELEGATE_BIND(55, 1, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 4, 5), _a0, _a1, _a2, a0, _a3, _a4);
715  _DPP_DELEGATE_BIND(56, 3, 3, _DPP_DELEGATE_BTDEFS(3, 3, 4, 5), a0, a1, a2, _a0, _a1, _a2);
716  _DPP_DELEGATE_BIND(57, 2, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 4, 5), _a0, a0, a1, _a1, _a2, _a3);
717  _DPP_DELEGATE_BIND(58, 2, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 4, 5), a0, _a0, a1, _a1, _a2, _a3);
718  _DPP_DELEGATE_BIND(59, 1, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 4, 5), _a0, _a1, a0, _a2, _a3, _a4);
719  _DPP_DELEGATE_BIND(60, 2, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 4, 5), a0, a1, _a0, _a1, _a2, _a3);
720  _DPP_DELEGATE_BIND(61, 1, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 4, 5), _a0, a0, _a1, _a2, _a3, _a4);
721  _DPP_DELEGATE_BIND(62, 1, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 4, 5), a0, _a0, _a1, _a2, _a3, _a4);
722  _DPP_DELEGATE_BIND(63, 0, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 4, 5), _a0, _a1, _a2, _a3, _a4, _a5);
723#endif
724
725#if DPP_DELEGATE_ARGC >= 7 // mkdoc:skip
726  _DPP_DELEGATE(7)
727  _DPP_DELEGATE_FUNC(7)
728  _DPP_DELEGATE_MEMBER(7)
729  _DPP_DELEGATE_MEMBER_THIS(7)
730  _DPP_DELEGATE_BIND(1, 6, 1, _DPP_DELEGATE_BTDEFS(1, 0), _a0, a0, a1, a2, a3, a4, a5);
731  _DPP_DELEGATE_BIND(2, 6, 1, _DPP_DELEGATE_BTDEFS(1, 1), a0, _a0, a1, a2, a3, a4, a5);
732  _DPP_DELEGATE_BIND(3, 5, 2, _DPP_DELEGATE_BTDEFS(2, 0, 1), _a0, _a1, a0, a1, a2, a3, a4);
733  _DPP_DELEGATE_BIND(4, 6, 1, _DPP_DELEGATE_BTDEFS(1, 2), a0, a1, _a0, a2, a3, a4, a5);
734  _DPP_DELEGATE_BIND(5, 5, 2, _DPP_DELEGATE_BTDEFS(2, 0, 2), _a0, a0, _a1, a1, a2, a3, a4);
735  _DPP_DELEGATE_BIND(6, 5, 2, _DPP_DELEGATE_BTDEFS(2, 1, 2), a0, _a0, _a1, a1, a2, a3, a4);
736  _DPP_DELEGATE_BIND(7, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 2), _a0, _a1, _a2, a0, a1, a2, a3);
737  _DPP_DELEGATE_BIND(8, 6, 1, _DPP_DELEGATE_BTDEFS(1, 3), a0, a1, a2, _a0, a3, a4, a5);
738  _DPP_DELEGATE_BIND(9, 5, 2, _DPP_DELEGATE_BTDEFS(2, 0, 3), _a0, a0, a1, _a1, a2, a3, a4);
739  _DPP_DELEGATE_BIND(10, 5, 2, _DPP_DELEGATE_BTDEFS(2, 1, 3), a0, _a0, a1, _a1, a2, a3, a4);
740  _DPP_DELEGATE_BIND(11, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 3), _a0, _a1, a0, _a2, a1, a2, a3);
741  _DPP_DELEGATE_BIND(12, 5, 2, _DPP_DELEGATE_BTDEFS(2, 2, 3), a0, a1, _a0, _a1, a2, a3, a4);
742  _DPP_DELEGATE_BIND(13, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 3), _a0, a0, _a1, _a2, a1, a2, a3);
743  _DPP_DELEGATE_BIND(14, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 3), a0, _a0, _a1, _a2, a1, a2, a3);
744  _DPP_DELEGATE_BIND(15, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 3), _a0, _a1, _a2, _a3, a0, a1, a2);
745  _DPP_DELEGATE_BIND(16, 6, 1, _DPP_DELEGATE_BTDEFS(1, 4), a0, a1, a2, a3, _a0, a4, a5);
746  _DPP_DELEGATE_BIND(17, 5, 2, _DPP_DELEGATE_BTDEFS(2, 0, 4), _a0, a0, a1, a2, _a1, a3, a4);
747  _DPP_DELEGATE_BIND(18, 5, 2, _DPP_DELEGATE_BTDEFS(2, 1, 4), a0, _a0, a1, a2, _a1, a3, a4);
748  _DPP_DELEGATE_BIND(19, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 4), _a0, _a1, a0, a1, _a2, a2, a3);
749  _DPP_DELEGATE_BIND(20, 5, 2, _DPP_DELEGATE_BTDEFS(2, 2, 4), a0, a1, _a0, a2, _a1, a3, a4);
750  _DPP_DELEGATE_BIND(21, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 4), _a0, a0, _a1, a1, _a2, a2, a3);
751  _DPP_DELEGATE_BIND(22, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 4), a0, _a0, _a1, a1, _a2, a2, a3);
752  _DPP_DELEGATE_BIND(23, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 4), _a0, _a1, _a2, a0, _a3, a1, a2);
753  _DPP_DELEGATE_BIND(24, 5, 2, _DPP_DELEGATE_BTDEFS(2, 3, 4), a0, a1, a2, _a0, _a1, a3, a4);
754  _DPP_DELEGATE_BIND(25, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 4), _a0, a0, a1, _a1, _a2, a2, a3);
755  _DPP_DELEGATE_BIND(26, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 4), a0, _a0, a1, _a1, _a2, a2, a3);
756  _DPP_DELEGATE_BIND(27, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 4), _a0, _a1, a0, _a2, _a3, a1, a2);
757  _DPP_DELEGATE_BIND(28, 4, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 4), a0, a1, _a0, _a1, _a2, a2, a3);
758  _DPP_DELEGATE_BIND(29, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 4), _a0, a0, _a1, _a2, _a3, a1, a2);
759  _DPP_DELEGATE_BIND(30, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 4), a0, _a0, _a1, _a2, _a3, a1, a2);
760  _DPP_DELEGATE_BIND(31, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 4), _a0, _a1, _a2, _a3, _a4, a0, a1);
761  _DPP_DELEGATE_BIND(32, 6, 1, _DPP_DELEGATE_BTDEFS(1, 5), a0, a1, a2, a3, a4, _a0, a5);
762  _DPP_DELEGATE_BIND(33, 5, 2, _DPP_DELEGATE_BTDEFS(2, 0, 5), _a0, a0, a1, a2, a3, _a1, a4);
763  _DPP_DELEGATE_BIND(34, 5, 2, _DPP_DELEGATE_BTDEFS(2, 1, 5), a0, _a0, a1, a2, a3, _a1, a4);
764  _DPP_DELEGATE_BIND(35, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 5), _a0, _a1, a0, a1, a2, _a2, a3);
765  _DPP_DELEGATE_BIND(36, 5, 2, _DPP_DELEGATE_BTDEFS(2, 2, 5), a0, a1, _a0, a2, a3, _a1, a4);
766  _DPP_DELEGATE_BIND(37, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 5), _a0, a0, _a1, a1, a2, _a2, a3);
767  _DPP_DELEGATE_BIND(38, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 5), a0, _a0, _a1, a1, a2, _a2, a3);
768  _DPP_DELEGATE_BIND(39, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 5), _a0, _a1, _a2, a0, a1, _a3, a2);
769  _DPP_DELEGATE_BIND(40, 5, 2, _DPP_DELEGATE_BTDEFS(2, 3, 5), a0, a1, a2, _a0, a3, _a1, a4);
770  _DPP_DELEGATE_BIND(41, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 5), _a0, a0, a1, _a1, a2, _a2, a3);
771  _DPP_DELEGATE_BIND(42, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 5), a0, _a0, a1, _a1, a2, _a2, a3);
772  _DPP_DELEGATE_BIND(43, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 5), _a0, _a1, a0, _a2, a1, _a3, a2);
773  _DPP_DELEGATE_BIND(44, 4, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 5), a0, a1, _a0, _a1, a2, _a2, a3);
774  _DPP_DELEGATE_BIND(45, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 5), _a0, a0, _a1, _a2, a1, _a3, a2);
775  _DPP_DELEGATE_BIND(46, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 5), a0, _a0, _a1, _a2, a1, _a3, a2);
776  _DPP_DELEGATE_BIND(47, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 5), _a0, _a1, _a2, _a3, a0, _a4, a1);
777  _DPP_DELEGATE_BIND(48, 5, 2, _DPP_DELEGATE_BTDEFS(2, 4, 5), a0, a1, a2, a3, _a0, _a1, a4);
778  _DPP_DELEGATE_BIND(49, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 4, 5), _a0, a0, a1, a2, _a1, _a2, a3);
779  _DPP_DELEGATE_BIND(50, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 4, 5), a0, _a0, a1, a2, _a1, _a2, a3);
780  _DPP_DELEGATE_BIND(51, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 4, 5), _a0, _a1, a0, a1, _a2, _a3, a2);
781  _DPP_DELEGATE_BIND(52, 4, 3, _DPP_DELEGATE_BTDEFS(3, 2, 4, 5), a0, a1, _a0, a2, _a1, _a2, a3);
782  _DPP_DELEGATE_BIND(53, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 4, 5), _a0, a0, _a1, a1, _a2, _a3, a2);
783  _DPP_DELEGATE_BIND(54, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 4, 5), a0, _a0, _a1, a1, _a2, _a3, a2);
784  _DPP_DELEGATE_BIND(55, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 4, 5), _a0, _a1, _a2, a0, _a3, _a4, a1);
785  _DPP_DELEGATE_BIND(56, 4, 3, _DPP_DELEGATE_BTDEFS(3, 3, 4, 5), a0, a1, a2, _a0, _a1, _a2, a3);
786  _DPP_DELEGATE_BIND(57, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 4, 5), _a0, a0, a1, _a1, _a2, _a3, a2);
787  _DPP_DELEGATE_BIND(58, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 4, 5), a0, _a0, a1, _a1, _a2, _a3, a2);
788  _DPP_DELEGATE_BIND(59, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 4, 5), _a0, _a1, a0, _a2, _a3, _a4, a1);
789  _DPP_DELEGATE_BIND(60, 3, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 4, 5), a0, a1, _a0, _a1, _a2, _a3, a2);
790  _DPP_DELEGATE_BIND(61, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 4, 5), _a0, a0, _a1, _a2, _a3, _a4, a1);
791  _DPP_DELEGATE_BIND(62, 2, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 4, 5), a0, _a0, _a1, _a2, _a3, _a4, a1);
792  _DPP_DELEGATE_BIND(63, 1, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 4, 5), _a0, _a1, _a2, _a3, _a4, _a5, a0);
793  _DPP_DELEGATE_BIND(64, 6, 1, _DPP_DELEGATE_BTDEFS(1, 6), a0, a1, a2, a3, a4, a5, _a0);
794  _DPP_DELEGATE_BIND(65, 5, 2, _DPP_DELEGATE_BTDEFS(2, 0, 6), _a0, a0, a1, a2, a3, a4, _a1);
795  _DPP_DELEGATE_BIND(66, 5, 2, _DPP_DELEGATE_BTDEFS(2, 1, 6), a0, _a0, a1, a2, a3, a4, _a1);
796  _DPP_DELEGATE_BIND(67, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 6), _a0, _a1, a0, a1, a2, a3, _a2);
797  _DPP_DELEGATE_BIND(68, 5, 2, _DPP_DELEGATE_BTDEFS(2, 2, 6), a0, a1, _a0, a2, a3, a4, _a1);
798  _DPP_DELEGATE_BIND(69, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 6), _a0, a0, _a1, a1, a2, a3, _a2);
799  _DPP_DELEGATE_BIND(70, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 6), a0, _a0, _a1, a1, a2, a3, _a2);
800  _DPP_DELEGATE_BIND(71, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 6), _a0, _a1, _a2, a0, a1, a2, _a3);
801  _DPP_DELEGATE_BIND(72, 5, 2, _DPP_DELEGATE_BTDEFS(2, 3, 6), a0, a1, a2, _a0, a3, a4, _a1);
802  _DPP_DELEGATE_BIND(73, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 6), _a0, a0, a1, _a1, a2, a3, _a2);
803  _DPP_DELEGATE_BIND(74, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 6), a0, _a0, a1, _a1, a2, a3, _a2);
804  _DPP_DELEGATE_BIND(75, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 6), _a0, _a1, a0, _a2, a1, a2, _a3);
805  _DPP_DELEGATE_BIND(76, 4, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 6), a0, a1, _a0, _a1, a2, a3, _a2);
806  _DPP_DELEGATE_BIND(77, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 6), _a0, a0, _a1, _a2, a1, a2, _a3);
807  _DPP_DELEGATE_BIND(78, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 6), a0, _a0, _a1, _a2, a1, a2, _a3);
808  _DPP_DELEGATE_BIND(79, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 6), _a0, _a1, _a2, _a3, a0, a1, _a4);
809  _DPP_DELEGATE_BIND(80, 5, 2, _DPP_DELEGATE_BTDEFS(2, 4, 6), a0, a1, a2, a3, _a0, a4, _a1);
810  _DPP_DELEGATE_BIND(81, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 4, 6), _a0, a0, a1, a2, _a1, a3, _a2);
811  _DPP_DELEGATE_BIND(82, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 4, 6), a0, _a0, a1, a2, _a1, a3, _a2);
812  _DPP_DELEGATE_BIND(83, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 4, 6), _a0, _a1, a0, a1, _a2, a2, _a3);
813  _DPP_DELEGATE_BIND(84, 4, 3, _DPP_DELEGATE_BTDEFS(3, 2, 4, 6), a0, a1, _a0, a2, _a1, a3, _a2);
814  _DPP_DELEGATE_BIND(85, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 4, 6), _a0, a0, _a1, a1, _a2, a2, _a3);
815  _DPP_DELEGATE_BIND(86, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 4, 6), a0, _a0, _a1, a1, _a2, a2, _a3);
816  _DPP_DELEGATE_BIND(87, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 4, 6), _a0, _a1, _a2, a0, _a3, a1, _a4);
817  _DPP_DELEGATE_BIND(88, 4, 3, _DPP_DELEGATE_BTDEFS(3, 3, 4, 6), a0, a1, a2, _a0, _a1, a3, _a2);
818  _DPP_DELEGATE_BIND(89, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 4, 6), _a0, a0, a1, _a1, _a2, a2, _a3);
819  _DPP_DELEGATE_BIND(90, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 4, 6), a0, _a0, a1, _a1, _a2, a2, _a3);
820  _DPP_DELEGATE_BIND(91, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 4, 6), _a0, _a1, a0, _a2, _a3, a1, _a4);
821  _DPP_DELEGATE_BIND(92, 3, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 4, 6), a0, a1, _a0, _a1, _a2, a2, _a3);
822  _DPP_DELEGATE_BIND(93, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 4, 6), _a0, a0, _a1, _a2, _a3, a1, _a4);
823  _DPP_DELEGATE_BIND(94, 2, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 4, 6), a0, _a0, _a1, _a2, _a3, a1, _a4);
824  _DPP_DELEGATE_BIND(95, 1, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 4, 6), _a0, _a1, _a2, _a3, _a4, a0, _a5);
825  _DPP_DELEGATE_BIND(96, 5, 2, _DPP_DELEGATE_BTDEFS(2, 5, 6), a0, a1, a2, a3, a4, _a0, _a1);
826  _DPP_DELEGATE_BIND(97, 4, 3, _DPP_DELEGATE_BTDEFS(3, 0, 5, 6), _a0, a0, a1, a2, a3, _a1, _a2);
827  _DPP_DELEGATE_BIND(98, 4, 3, _DPP_DELEGATE_BTDEFS(3, 1, 5, 6), a0, _a0, a1, a2, a3, _a1, _a2);
828  _DPP_DELEGATE_BIND(99, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 5, 6), _a0, _a1, a0, a1, a2, _a2, _a3);
829  _DPP_DELEGATE_BIND(100, 4, 3, _DPP_DELEGATE_BTDEFS(3, 2, 5, 6), a0, a1, _a0, a2, a3, _a1, _a2);
830  _DPP_DELEGATE_BIND(101, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 5, 6), _a0, a0, _a1, a1, a2, _a2, _a3);
831  _DPP_DELEGATE_BIND(102, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 5, 6), a0, _a0, _a1, a1, a2, _a2, _a3);
832  _DPP_DELEGATE_BIND(103, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 5, 6), _a0, _a1, _a2, a0, a1, _a3, _a4);
833  _DPP_DELEGATE_BIND(104, 4, 3, _DPP_DELEGATE_BTDEFS(3, 3, 5, 6), a0, a1, a2, _a0, a3, _a1, _a2);
834  _DPP_DELEGATE_BIND(105, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 5, 6), _a0, a0, a1, _a1, a2, _a2, _a3);
835  _DPP_DELEGATE_BIND(106, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 5, 6), a0, _a0, a1, _a1, a2, _a2, _a3);
836  _DPP_DELEGATE_BIND(107, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 5, 6), _a0, _a1, a0, _a2, a1, _a3, _a4);
837  _DPP_DELEGATE_BIND(108, 3, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 5, 6), a0, a1, _a0, _a1, a2, _a2, _a3);
838  _DPP_DELEGATE_BIND(109, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 5, 6), _a0, a0, _a1, _a2, a1, _a3, _a4);
839  _DPP_DELEGATE_BIND(110, 2, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 5, 6), a0, _a0, _a1, _a2, a1, _a3, _a4);
840  _DPP_DELEGATE_BIND(111, 1, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 5, 6), _a0, _a1, _a2, _a3, a0, _a4, _a5);
841  _DPP_DELEGATE_BIND(112, 4, 3, _DPP_DELEGATE_BTDEFS(3, 4, 5, 6), a0, a1, a2, a3, _a0, _a1, _a2);
842  _DPP_DELEGATE_BIND(113, 3, 4, _DPP_DELEGATE_BTDEFS(4, 0, 4, 5, 6), _a0, a0, a1, a2, _a1, _a2, _a3);
843  _DPP_DELEGATE_BIND(114, 3, 4, _DPP_DELEGATE_BTDEFS(4, 1, 4, 5, 6), a0, _a0, a1, a2, _a1, _a2, _a3);
844  _DPP_DELEGATE_BIND(115, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 4, 5, 6), _a0, _a1, a0, a1, _a2, _a3, _a4);
845  _DPP_DELEGATE_BIND(116, 3, 4, _DPP_DELEGATE_BTDEFS(4, 2, 4, 5, 6), a0, a1, _a0, a2, _a1, _a2, _a3);
846  _DPP_DELEGATE_BIND(117, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 4, 5, 6), _a0, a0, _a1, a1, _a2, _a3, _a4);
847  _DPP_DELEGATE_BIND(118, 2, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 4, 5, 6), a0, _a0, _a1, a1, _a2, _a3, _a4);
848  _DPP_DELEGATE_BIND(119, 1, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 4, 5, 6), _a0, _a1, _a2, a0, _a3, _a4, _a5);
849  _DPP_DELEGATE_BIND(120, 3, 4, _DPP_DELEGATE_BTDEFS(4, 3, 4, 5, 6), a0, a1, a2, _a0, _a1, _a2, _a3);
850  _DPP_DELEGATE_BIND(121, 2, 5, _DPP_DELEGATE_BTDEFS(5, 0, 3, 4, 5, 6), _a0, a0, a1, _a1, _a2, _a3, _a4);
851  _DPP_DELEGATE_BIND(122, 2, 5, _DPP_DELEGATE_BTDEFS(5, 1, 3, 4, 5, 6), a0, _a0, a1, _a1, _a2, _a3, _a4);
852  _DPP_DELEGATE_BIND(123, 1, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 3, 4, 5, 6), _a0, _a1, a0, _a2, _a3, _a4, _a5);
853  _DPP_DELEGATE_BIND(124, 2, 5, _DPP_DELEGATE_BTDEFS(5, 2, 3, 4, 5, 6), a0, a1, _a0, _a1, _a2, _a3, _a4);
854  _DPP_DELEGATE_BIND(125, 1, 6, _DPP_DELEGATE_BTDEFS(6, 0, 2, 3, 4, 5, 6), _a0, a0, _a1, _a2, _a3, _a4, _a5);
855  _DPP_DELEGATE_BIND(126, 1, 6, _DPP_DELEGATE_BTDEFS(6, 1, 2, 3, 4, 5, 6), a0, _a0, _a1, _a2, _a3, _a4, _a5);
856  _DPP_DELEGATE_BIND(127, 0, 7, _DPP_DELEGATE_BTDEFS(7, 0, 1, 2, 3, 4, 5, 6), _a0, _a1, _a2, _a3, _a4, _a5, _a6);
857#endif
858
859#if DPP_DELEGATE_ARGC >= 8 // mkdoc:skip
860  _DPP_DELEGATE(8)
861  _DPP_DELEGATE_FUNC(8)
862  _DPP_DELEGATE_MEMBER(8)
863  _DPP_DELEGATE_MEMBER_THIS(8)
864  _DPP_DELEGATE_BIND(1, 7, 1, _DPP_DELEGATE_BTDEFS(1, 0), _a0, a0, a1, a2, a3, a4, a5, a6);
865  _DPP_DELEGATE_BIND(2, 7, 1, _DPP_DELEGATE_BTDEFS(1, 1), a0, _a0, a1, a2, a3, a4, a5, a6);
866  _DPP_DELEGATE_BIND(3, 6, 2, _DPP_DELEGATE_BTDEFS(2, 0, 1), _a0, _a1, a0, a1, a2, a3, a4, a5);
867  _DPP_DELEGATE_BIND(4, 7, 1, _DPP_DELEGATE_BTDEFS(1, 2), a0, a1, _a0, a2, a3, a4, a5, a6);
868  _DPP_DELEGATE_BIND(5, 6, 2, _DPP_DELEGATE_BTDEFS(2, 0, 2), _a0, a0, _a1, a1, a2, a3, a4, a5);
869  _DPP_DELEGATE_BIND(6, 6, 2, _DPP_DELEGATE_BTDEFS(2, 1, 2), a0, _a0, _a1, a1, a2, a3, a4, a5);
870  _DPP_DELEGATE_BIND(7, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 2), _a0, _a1, _a2, a0, a1, a2, a3, a4);
871  _DPP_DELEGATE_BIND(8, 7, 1, _DPP_DELEGATE_BTDEFS(1, 3), a0, a1, a2, _a0, a3, a4, a5, a6);
872  _DPP_DELEGATE_BIND(9, 6, 2, _DPP_DELEGATE_BTDEFS(2, 0, 3), _a0, a0, a1, _a1, a2, a3, a4, a5);
873  _DPP_DELEGATE_BIND(10, 6, 2, _DPP_DELEGATE_BTDEFS(2, 1, 3), a0, _a0, a1, _a1, a2, a3, a4, a5);
874  _DPP_DELEGATE_BIND(11, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 3), _a0, _a1, a0, _a2, a1, a2, a3, a4);
875  _DPP_DELEGATE_BIND(12, 6, 2, _DPP_DELEGATE_BTDEFS(2, 2, 3), a0, a1, _a0, _a1, a2, a3, a4, a5);
876  _DPP_DELEGATE_BIND(13, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 3), _a0, a0, _a1, _a2, a1, a2, a3, a4);
877  _DPP_DELEGATE_BIND(14, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 3), a0, _a0, _a1, _a2, a1, a2, a3, a4);
878  _DPP_DELEGATE_BIND(15, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 3), _a0, _a1, _a2, _a3, a0, a1, a2, a3);
879  _DPP_DELEGATE_BIND(16, 7, 1, _DPP_DELEGATE_BTDEFS(1, 4), a0, a1, a2, a3, _a0, a4, a5, a6);
880  _DPP_DELEGATE_BIND(17, 6, 2, _DPP_DELEGATE_BTDEFS(2, 0, 4), _a0, a0, a1, a2, _a1, a3, a4, a5);
881  _DPP_DELEGATE_BIND(18, 6, 2, _DPP_DELEGATE_BTDEFS(2, 1, 4), a0, _a0, a1, a2, _a1, a3, a4, a5);
882  _DPP_DELEGATE_BIND(19, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 4), _a0, _a1, a0, a1, _a2, a2, a3, a4);
883  _DPP_DELEGATE_BIND(20, 6, 2, _DPP_DELEGATE_BTDEFS(2, 2, 4), a0, a1, _a0, a2, _a1, a3, a4, a5);
884  _DPP_DELEGATE_BIND(21, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 4), _a0, a0, _a1, a1, _a2, a2, a3, a4);
885  _DPP_DELEGATE_BIND(22, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 4), a0, _a0, _a1, a1, _a2, a2, a3, a4);
886  _DPP_DELEGATE_BIND(23, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 4), _a0, _a1, _a2, a0, _a3, a1, a2, a3);
887  _DPP_DELEGATE_BIND(24, 6, 2, _DPP_DELEGATE_BTDEFS(2, 3, 4), a0, a1, a2, _a0, _a1, a3, a4, a5);
888  _DPP_DELEGATE_BIND(25, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 4), _a0, a0, a1, _a1, _a2, a2, a3, a4);
889  _DPP_DELEGATE_BIND(26, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 4), a0, _a0, a1, _a1, _a2, a2, a3, a4);
890  _DPP_DELEGATE_BIND(27, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 4), _a0, _a1, a0, _a2, _a3, a1, a2, a3);
891  _DPP_DELEGATE_BIND(28, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 4), a0, a1, _a0, _a1, _a2, a2, a3, a4);
892  _DPP_DELEGATE_BIND(29, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 4), _a0, a0, _a1, _a2, _a3, a1, a2, a3);
893  _DPP_DELEGATE_BIND(30, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 4), a0, _a0, _a1, _a2, _a3, a1, a2, a3);
894  _DPP_DELEGATE_BIND(31, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 4), _a0, _a1, _a2, _a3, _a4, a0, a1, a2);
895  _DPP_DELEGATE_BIND(32, 7, 1, _DPP_DELEGATE_BTDEFS(1, 5), a0, a1, a2, a3, a4, _a0, a5, a6);
896  _DPP_DELEGATE_BIND(33, 6, 2, _DPP_DELEGATE_BTDEFS(2, 0, 5), _a0, a0, a1, a2, a3, _a1, a4, a5);
897  _DPP_DELEGATE_BIND(34, 6, 2, _DPP_DELEGATE_BTDEFS(2, 1, 5), a0, _a0, a1, a2, a3, _a1, a4, a5);
898  _DPP_DELEGATE_BIND(35, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 5), _a0, _a1, a0, a1, a2, _a2, a3, a4);
899  _DPP_DELEGATE_BIND(36, 6, 2, _DPP_DELEGATE_BTDEFS(2, 2, 5), a0, a1, _a0, a2, a3, _a1, a4, a5);
900  _DPP_DELEGATE_BIND(37, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 5), _a0, a0, _a1, a1, a2, _a2, a3, a4);
901  _DPP_DELEGATE_BIND(38, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 5), a0, _a0, _a1, a1, a2, _a2, a3, a4);
902  _DPP_DELEGATE_BIND(39, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 5), _a0, _a1, _a2, a0, a1, _a3, a2, a3);
903  _DPP_DELEGATE_BIND(40, 6, 2, _DPP_DELEGATE_BTDEFS(2, 3, 5), a0, a1, a2, _a0, a3, _a1, a4, a5);
904  _DPP_DELEGATE_BIND(41, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 5), _a0, a0, a1, _a1, a2, _a2, a3, a4);
905  _DPP_DELEGATE_BIND(42, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 5), a0, _a0, a1, _a1, a2, _a2, a3, a4);
906  _DPP_DELEGATE_BIND(43, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 5), _a0, _a1, a0, _a2, a1, _a3, a2, a3);
907  _DPP_DELEGATE_BIND(44, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 5), a0, a1, _a0, _a1, a2, _a2, a3, a4);
908  _DPP_DELEGATE_BIND(45, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 5), _a0, a0, _a1, _a2, a1, _a3, a2, a3);
909  _DPP_DELEGATE_BIND(46, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 5), a0, _a0, _a1, _a2, a1, _a3, a2, a3);
910  _DPP_DELEGATE_BIND(47, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 5), _a0, _a1, _a2, _a3, a0, _a4, a1, a2);
911  _DPP_DELEGATE_BIND(48, 6, 2, _DPP_DELEGATE_BTDEFS(2, 4, 5), a0, a1, a2, a3, _a0, _a1, a4, a5);
912  _DPP_DELEGATE_BIND(49, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 4, 5), _a0, a0, a1, a2, _a1, _a2, a3, a4);
913  _DPP_DELEGATE_BIND(50, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 4, 5), a0, _a0, a1, a2, _a1, _a2, a3, a4);
914  _DPP_DELEGATE_BIND(51, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 4, 5), _a0, _a1, a0, a1, _a2, _a3, a2, a3);
915  _DPP_DELEGATE_BIND(52, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 4, 5), a0, a1, _a0, a2, _a1, _a2, a3, a4);
916  _DPP_DELEGATE_BIND(53, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 4, 5), _a0, a0, _a1, a1, _a2, _a3, a2, a3);
917  _DPP_DELEGATE_BIND(54, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 4, 5), a0, _a0, _a1, a1, _a2, _a3, a2, a3);
918  _DPP_DELEGATE_BIND(55, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 4, 5), _a0, _a1, _a2, a0, _a3, _a4, a1, a2);
919  _DPP_DELEGATE_BIND(56, 5, 3, _DPP_DELEGATE_BTDEFS(3, 3, 4, 5), a0, a1, a2, _a0, _a1, _a2, a3, a4);
920  _DPP_DELEGATE_BIND(57, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 4, 5), _a0, a0, a1, _a1, _a2, _a3, a2, a3);
921  _DPP_DELEGATE_BIND(58, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 4, 5), a0, _a0, a1, _a1, _a2, _a3, a2, a3);
922  _DPP_DELEGATE_BIND(59, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 4, 5), _a0, _a1, a0, _a2, _a3, _a4, a1, a2);
923  _DPP_DELEGATE_BIND(60, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 4, 5), a0, a1, _a0, _a1, _a2, _a3, a2, a3);
924  _DPP_DELEGATE_BIND(61, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 4, 5), _a0, a0, _a1, _a2, _a3, _a4, a1, a2);
925  _DPP_DELEGATE_BIND(62, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 4, 5), a0, _a0, _a1, _a2, _a3, _a4, a1, a2);
926  _DPP_DELEGATE_BIND(63, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 4, 5), _a0, _a1, _a2, _a3, _a4, _a5, a0, a1);
927  _DPP_DELEGATE_BIND(64, 7, 1, _DPP_DELEGATE_BTDEFS(1, 6), a0, a1, a2, a3, a4, a5, _a0, a6);
928  _DPP_DELEGATE_BIND(65, 6, 2, _DPP_DELEGATE_BTDEFS(2, 0, 6), _a0, a0, a1, a2, a3, a4, _a1, a5);
929  _DPP_DELEGATE_BIND(66, 6, 2, _DPP_DELEGATE_BTDEFS(2, 1, 6), a0, _a0, a1, a2, a3, a4, _a1, a5);
930  _DPP_DELEGATE_BIND(67, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 6), _a0, _a1, a0, a1, a2, a3, _a2, a4);
931  _DPP_DELEGATE_BIND(68, 6, 2, _DPP_DELEGATE_BTDEFS(2, 2, 6), a0, a1, _a0, a2, a3, a4, _a1, a5);
932  _DPP_DELEGATE_BIND(69, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 6), _a0, a0, _a1, a1, a2, a3, _a2, a4);
933  _DPP_DELEGATE_BIND(70, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 6), a0, _a0, _a1, a1, a2, a3, _a2, a4);
934  _DPP_DELEGATE_BIND(71, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 6), _a0, _a1, _a2, a0, a1, a2, _a3, a3);
935  _DPP_DELEGATE_BIND(72, 6, 2, _DPP_DELEGATE_BTDEFS(2, 3, 6), a0, a1, a2, _a0, a3, a4, _a1, a5);
936  _DPP_DELEGATE_BIND(73, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 6), _a0, a0, a1, _a1, a2, a3, _a2, a4);
937  _DPP_DELEGATE_BIND(74, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 6), a0, _a0, a1, _a1, a2, a3, _a2, a4);
938  _DPP_DELEGATE_BIND(75, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 6), _a0, _a1, a0, _a2, a1, a2, _a3, a3);
939  _DPP_DELEGATE_BIND(76, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 6), a0, a1, _a0, _a1, a2, a3, _a2, a4);
940  _DPP_DELEGATE_BIND(77, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 6), _a0, a0, _a1, _a2, a1, a2, _a3, a3);
941  _DPP_DELEGATE_BIND(78, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 6), a0, _a0, _a1, _a2, a1, a2, _a3, a3);
942  _DPP_DELEGATE_BIND(79, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 6), _a0, _a1, _a2, _a3, a0, a1, _a4, a2);
943  _DPP_DELEGATE_BIND(80, 6, 2, _DPP_DELEGATE_BTDEFS(2, 4, 6), a0, a1, a2, a3, _a0, a4, _a1, a5);
944  _DPP_DELEGATE_BIND(81, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 4, 6), _a0, a0, a1, a2, _a1, a3, _a2, a4);
945  _DPP_DELEGATE_BIND(82, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 4, 6), a0, _a0, a1, a2, _a1, a3, _a2, a4);
946  _DPP_DELEGATE_BIND(83, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 4, 6), _a0, _a1, a0, a1, _a2, a2, _a3, a3);
947  _DPP_DELEGATE_BIND(84, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 4, 6), a0, a1, _a0, a2, _a1, a3, _a2, a4);
948  _DPP_DELEGATE_BIND(85, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 4, 6), _a0, a0, _a1, a1, _a2, a2, _a3, a3);
949  _DPP_DELEGATE_BIND(86, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 4, 6), a0, _a0, _a1, a1, _a2, a2, _a3, a3);
950  _DPP_DELEGATE_BIND(87, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 4, 6), _a0, _a1, _a2, a0, _a3, a1, _a4, a2);
951  _DPP_DELEGATE_BIND(88, 5, 3, _DPP_DELEGATE_BTDEFS(3, 3, 4, 6), a0, a1, a2, _a0, _a1, a3, _a2, a4);
952  _DPP_DELEGATE_BIND(89, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 4, 6), _a0, a0, a1, _a1, _a2, a2, _a3, a3);
953  _DPP_DELEGATE_BIND(90, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 4, 6), a0, _a0, a1, _a1, _a2, a2, _a3, a3);
954  _DPP_DELEGATE_BIND(91, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 4, 6), _a0, _a1, a0, _a2, _a3, a1, _a4, a2);
955  _DPP_DELEGATE_BIND(92, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 4, 6), a0, a1, _a0, _a1, _a2, a2, _a3, a3);
956  _DPP_DELEGATE_BIND(93, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 4, 6), _a0, a0, _a1, _a2, _a3, a1, _a4, a2);
957  _DPP_DELEGATE_BIND(94, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 4, 6), a0, _a0, _a1, _a2, _a3, a1, _a4, a2);
958  _DPP_DELEGATE_BIND(95, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 4, 6), _a0, _a1, _a2, _a3, _a4, a0, _a5, a1);
959  _DPP_DELEGATE_BIND(96, 6, 2, _DPP_DELEGATE_BTDEFS(2, 5, 6), a0, a1, a2, a3, a4, _a0, _a1, a5);
960  _DPP_DELEGATE_BIND(97, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 5, 6), _a0, a0, a1, a2, a3, _a1, _a2, a4);
961  _DPP_DELEGATE_BIND(98, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 5, 6), a0, _a0, a1, a2, a3, _a1, _a2, a4);
962  _DPP_DELEGATE_BIND(99, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 5, 6), _a0, _a1, a0, a1, a2, _a2, _a3, a3);
963  _DPP_DELEGATE_BIND(100, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 5, 6), a0, a1, _a0, a2, a3, _a1, _a2, a4);
964  _DPP_DELEGATE_BIND(101, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 5, 6), _a0, a0, _a1, a1, a2, _a2, _a3, a3);
965  _DPP_DELEGATE_BIND(102, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 5, 6), a0, _a0, _a1, a1, a2, _a2, _a3, a3);
966  _DPP_DELEGATE_BIND(103, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 5, 6), _a0, _a1, _a2, a0, a1, _a3, _a4, a2);
967  _DPP_DELEGATE_BIND(104, 5, 3, _DPP_DELEGATE_BTDEFS(3, 3, 5, 6), a0, a1, a2, _a0, a3, _a1, _a2, a4);
968  _DPP_DELEGATE_BIND(105, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 5, 6), _a0, a0, a1, _a1, a2, _a2, _a3, a3);
969  _DPP_DELEGATE_BIND(106, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 5, 6), a0, _a0, a1, _a1, a2, _a2, _a3, a3);
970  _DPP_DELEGATE_BIND(107, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 5, 6), _a0, _a1, a0, _a2, a1, _a3, _a4, a2);
971  _DPP_DELEGATE_BIND(108, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 5, 6), a0, a1, _a0, _a1, a2, _a2, _a3, a3);
972  _DPP_DELEGATE_BIND(109, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 5, 6), _a0, a0, _a1, _a2, a1, _a3, _a4, a2);
973  _DPP_DELEGATE_BIND(110, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 5, 6), a0, _a0, _a1, _a2, a1, _a3, _a4, a2);
974  _DPP_DELEGATE_BIND(111, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 5, 6), _a0, _a1, _a2, _a3, a0, _a4, _a5, a1);
975  _DPP_DELEGATE_BIND(112, 5, 3, _DPP_DELEGATE_BTDEFS(3, 4, 5, 6), a0, a1, a2, a3, _a0, _a1, _a2, a4);
976  _DPP_DELEGATE_BIND(113, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 4, 5, 6), _a0, a0, a1, a2, _a1, _a2, _a3, a3);
977  _DPP_DELEGATE_BIND(114, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 4, 5, 6), a0, _a0, a1, a2, _a1, _a2, _a3, a3);
978  _DPP_DELEGATE_BIND(115, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 4, 5, 6), _a0, _a1, a0, a1, _a2, _a3, _a4, a2);
979  _DPP_DELEGATE_BIND(116, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 4, 5, 6), a0, a1, _a0, a2, _a1, _a2, _a3, a3);
980  _DPP_DELEGATE_BIND(117, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 4, 5, 6), _a0, a0, _a1, a1, _a2, _a3, _a4, a2);
981  _DPP_DELEGATE_BIND(118, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 4, 5, 6), a0, _a0, _a1, a1, _a2, _a3, _a4, a2);
982  _DPP_DELEGATE_BIND(119, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 4, 5, 6), _a0, _a1, _a2, a0, _a3, _a4, _a5, a1);
983  _DPP_DELEGATE_BIND(120, 4, 4, _DPP_DELEGATE_BTDEFS(4, 3, 4, 5, 6), a0, a1, a2, _a0, _a1, _a2, _a3, a3);
984  _DPP_DELEGATE_BIND(121, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 3, 4, 5, 6), _a0, a0, a1, _a1, _a2, _a3, _a4, a2);
985  _DPP_DELEGATE_BIND(122, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 3, 4, 5, 6), a0, _a0, a1, _a1, _a2, _a3, _a4, a2);
986  _DPP_DELEGATE_BIND(123, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 3, 4, 5, 6), _a0, _a1, a0, _a2, _a3, _a4, _a5, a1);
987  _DPP_DELEGATE_BIND(124, 3, 5, _DPP_DELEGATE_BTDEFS(5, 2, 3, 4, 5, 6), a0, a1, _a0, _a1, _a2, _a3, _a4, a2);
988  _DPP_DELEGATE_BIND(125, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 2, 3, 4, 5, 6), _a0, a0, _a1, _a2, _a3, _a4, _a5, a1);
989  _DPP_DELEGATE_BIND(126, 2, 6, _DPP_DELEGATE_BTDEFS(6, 1, 2, 3, 4, 5, 6), a0, _a0, _a1, _a2, _a3, _a4, _a5, a1);
990  _DPP_DELEGATE_BIND(127, 1, 7, _DPP_DELEGATE_BTDEFS(7, 0, 1, 2, 3, 4, 5, 6), _a0, _a1, _a2, _a3, _a4, _a5, _a6, a0);
991  _DPP_DELEGATE_BIND(128, 7, 1, _DPP_DELEGATE_BTDEFS(1, 7), a0, a1, a2, a3, a4, a5, a6, _a0);
992  _DPP_DELEGATE_BIND(129, 6, 2, _DPP_DELEGATE_BTDEFS(2, 0, 7), _a0, a0, a1, a2, a3, a4, a5, _a1);
993  _DPP_DELEGATE_BIND(130, 6, 2, _DPP_DELEGATE_BTDEFS(2, 1, 7), a0, _a0, a1, a2, a3, a4, a5, _a1);
994  _DPP_DELEGATE_BIND(131, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 1, 7), _a0, _a1, a0, a1, a2, a3, a4, _a2);
995  _DPP_DELEGATE_BIND(132, 6, 2, _DPP_DELEGATE_BTDEFS(2, 2, 7), a0, a1, _a0, a2, a3, a4, a5, _a1);
996  _DPP_DELEGATE_BIND(133, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 2, 7), _a0, a0, _a1, a1, a2, a3, a4, _a2);
997  _DPP_DELEGATE_BIND(134, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 2, 7), a0, _a0, _a1, a1, a2, a3, a4, _a2);
998  _DPP_DELEGATE_BIND(135, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 2, 7), _a0, _a1, _a2, a0, a1, a2, a3, _a3);
999  _DPP_DELEGATE_BIND(136, 6, 2, _DPP_DELEGATE_BTDEFS(2, 3, 7), a0, a1, a2, _a0, a3, a4, a5, _a1);
1000  _DPP_DELEGATE_BIND(137, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 3, 7), _a0, a0, a1, _a1, a2, a3, a4, _a2);
1001  _DPP_DELEGATE_BIND(138, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 3, 7), a0, _a0, a1, _a1, a2, a3, a4, _a2);
1002  _DPP_DELEGATE_BIND(139, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 3, 7), _a0, _a1, a0, _a2, a1, a2, a3, _a3);
1003  _DPP_DELEGATE_BIND(140, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 3, 7), a0, a1, _a0, _a1, a2, a3, a4, _a2);
1004  _DPP_DELEGATE_BIND(141, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 3, 7), _a0, a0, _a1, _a2, a1, a2, a3, _a3);
1005  _DPP_DELEGATE_BIND(142, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 3, 7), a0, _a0, _a1, _a2, a1, a2, a3, _a3);
1006  _DPP_DELEGATE_BIND(143, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 3, 7), _a0, _a1, _a2, _a3, a0, a1, a2, _a4);
1007  _DPP_DELEGATE_BIND(144, 6, 2, _DPP_DELEGATE_BTDEFS(2, 4, 7), a0, a1, a2, a3, _a0, a4, a5, _a1);
1008  _DPP_DELEGATE_BIND(145, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 4, 7), _a0, a0, a1, a2, _a1, a3, a4, _a2);
1009  _DPP_DELEGATE_BIND(146, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 4, 7), a0, _a0, a1, a2, _a1, a3, a4, _a2);
1010  _DPP_DELEGATE_BIND(147, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 4, 7), _a0, _a1, a0, a1, _a2, a2, a3, _a3);
1011  _DPP_DELEGATE_BIND(148, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 4, 7), a0, a1, _a0, a2, _a1, a3, a4, _a2);
1012  _DPP_DELEGATE_BIND(149, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 4, 7), _a0, a0, _a1, a1, _a2, a2, a3, _a3);
1013  _DPP_DELEGATE_BIND(150, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 4, 7), a0, _a0, _a1, a1, _a2, a2, a3, _a3);
1014  _DPP_DELEGATE_BIND(151, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 4, 7), _a0, _a1, _a2, a0, _a3, a1, a2, _a4);
1015  _DPP_DELEGATE_BIND(152, 5, 3, _DPP_DELEGATE_BTDEFS(3, 3, 4, 7), a0, a1, a2, _a0, _a1, a3, a4, _a2);
1016  _DPP_DELEGATE_BIND(153, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 4, 7), _a0, a0, a1, _a1, _a2, a2, a3, _a3);
1017  _DPP_DELEGATE_BIND(154, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 4, 7), a0, _a0, a1, _a1, _a2, a2, a3, _a3);
1018  _DPP_DELEGATE_BIND(155, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 4, 7), _a0, _a1, a0, _a2, _a3, a1, a2, _a4);
1019  _DPP_DELEGATE_BIND(156, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 4, 7), a0, a1, _a0, _a1, _a2, a2, a3, _a3);
1020  _DPP_DELEGATE_BIND(157, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 4, 7), _a0, a0, _a1, _a2, _a3, a1, a2, _a4);
1021  _DPP_DELEGATE_BIND(158, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 4, 7), a0, _a0, _a1, _a2, _a3, a1, a2, _a4);
1022  _DPP_DELEGATE_BIND(159, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 4, 7), _a0, _a1, _a2, _a3, _a4, a0, a1, _a5);
1023  _DPP_DELEGATE_BIND(160, 6, 2, _DPP_DELEGATE_BTDEFS(2, 5, 7), a0, a1, a2, a3, a4, _a0, a5, _a1);
1024  _DPP_DELEGATE_BIND(161, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 5, 7), _a0, a0, a1, a2, a3, _a1, a4, _a2);
1025  _DPP_DELEGATE_BIND(162, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 5, 7), a0, _a0, a1, a2, a3, _a1, a4, _a2);
1026  _DPP_DELEGATE_BIND(163, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 5, 7), _a0, _a1, a0, a1, a2, _a2, a3, _a3);
1027  _DPP_DELEGATE_BIND(164, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 5, 7), a0, a1, _a0, a2, a3, _a1, a4, _a2);
1028  _DPP_DELEGATE_BIND(165, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 5, 7), _a0, a0, _a1, a1, a2, _a2, a3, _a3);
1029  _DPP_DELEGATE_BIND(166, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 5, 7), a0, _a0, _a1, a1, a2, _a2, a3, _a3);
1030  _DPP_DELEGATE_BIND(167, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 5, 7), _a0, _a1, _a2, a0, a1, _a3, a2, _a4);
1031  _DPP_DELEGATE_BIND(168, 5, 3, _DPP_DELEGATE_BTDEFS(3, 3, 5, 7), a0, a1, a2, _a0, a3, _a1, a4, _a2);
1032  _DPP_DELEGATE_BIND(169, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 5, 7), _a0, a0, a1, _a1, a2, _a2, a3, _a3);
1033  _DPP_DELEGATE_BIND(170, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 5, 7), a0, _a0, a1, _a1, a2, _a2, a3, _a3);
1034  _DPP_DELEGATE_BIND(171, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 5, 7), _a0, _a1, a0, _a2, a1, _a3, a2, _a4);
1035  _DPP_DELEGATE_BIND(172, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 5, 7), a0, a1, _a0, _a1, a2, _a2, a3, _a3);
1036  _DPP_DELEGATE_BIND(173, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 5, 7), _a0, a0, _a1, _a2, a1, _a3, a2, _a4);
1037  _DPP_DELEGATE_BIND(174, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 5, 7), a0, _a0, _a1, _a2, a1, _a3, a2, _a4);
1038  _DPP_DELEGATE_BIND(175, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 5, 7), _a0, _a1, _a2, _a3, a0, _a4, a1, _a5);
1039  _DPP_DELEGATE_BIND(176, 5, 3, _DPP_DELEGATE_BTDEFS(3, 4, 5, 7), a0, a1, a2, a3, _a0, _a1, a4, _a2);
1040  _DPP_DELEGATE_BIND(177, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 4, 5, 7), _a0, a0, a1, a2, _a1, _a2, a3, _a3);
1041  _DPP_DELEGATE_BIND(178, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 4, 5, 7), a0, _a0, a1, a2, _a1, _a2, a3, _a3);
1042  _DPP_DELEGATE_BIND(179, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 4, 5, 7), _a0, _a1, a0, a1, _a2, _a3, a2, _a4);
1043  _DPP_DELEGATE_BIND(180, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 4, 5, 7), a0, a1, _a0, a2, _a1, _a2, a3, _a3);
1044  _DPP_DELEGATE_BIND(181, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 4, 5, 7), _a0, a0, _a1, a1, _a2, _a3, a2, _a4);
1045  _DPP_DELEGATE_BIND(182, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 4, 5, 7), a0, _a0, _a1, a1, _a2, _a3, a2, _a4);
1046  _DPP_DELEGATE_BIND(183, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 4, 5, 7), _a0, _a1, _a2, a0, _a3, _a4, a1, _a5);
1047  _DPP_DELEGATE_BIND(184, 4, 4, _DPP_DELEGATE_BTDEFS(4, 3, 4, 5, 7), a0, a1, a2, _a0, _a1, _a2, a3, _a3);
1048  _DPP_DELEGATE_BIND(185, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 3, 4, 5, 7), _a0, a0, a1, _a1, _a2, _a3, a2, _a4);
1049  _DPP_DELEGATE_BIND(186, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 3, 4, 5, 7), a0, _a0, a1, _a1, _a2, _a3, a2, _a4);
1050  _DPP_DELEGATE_BIND(187, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 3, 4, 5, 7), _a0, _a1, a0, _a2, _a3, _a4, a1, _a5);
1051  _DPP_DELEGATE_BIND(188, 3, 5, _DPP_DELEGATE_BTDEFS(5, 2, 3, 4, 5, 7), a0, a1, _a0, _a1, _a2, _a3, a2, _a4);
1052  _DPP_DELEGATE_BIND(189, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 2, 3, 4, 5, 7), _a0, a0, _a1, _a2, _a3, _a4, a1, _a5);
1053  _DPP_DELEGATE_BIND(190, 2, 6, _DPP_DELEGATE_BTDEFS(6, 1, 2, 3, 4, 5, 7), a0, _a0, _a1, _a2, _a3, _a4, a1, _a5);
1054  _DPP_DELEGATE_BIND(191, 1, 7, _DPP_DELEGATE_BTDEFS(7, 0, 1, 2, 3, 4, 5, 7), _a0, _a1, _a2, _a3, _a4, _a5, a0, _a6);
1055  _DPP_DELEGATE_BIND(192, 6, 2, _DPP_DELEGATE_BTDEFS(2, 6, 7), a0, a1, a2, a3, a4, a5, _a0, _a1);
1056  _DPP_DELEGATE_BIND(193, 5, 3, _DPP_DELEGATE_BTDEFS(3, 0, 6, 7), _a0, a0, a1, a2, a3, a4, _a1, _a2);
1057  _DPP_DELEGATE_BIND(194, 5, 3, _DPP_DELEGATE_BTDEFS(3, 1, 6, 7), a0, _a0, a1, a2, a3, a4, _a1, _a2);
1058  _DPP_DELEGATE_BIND(195, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 1, 6, 7), _a0, _a1, a0, a1, a2, a3, _a2, _a3);
1059  _DPP_DELEGATE_BIND(196, 5, 3, _DPP_DELEGATE_BTDEFS(3, 2, 6, 7), a0, a1, _a0, a2, a3, a4, _a1, _a2);
1060  _DPP_DELEGATE_BIND(197, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 2, 6, 7), _a0, a0, _a1, a1, a2, a3, _a2, _a3);
1061  _DPP_DELEGATE_BIND(198, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 2, 6, 7), a0, _a0, _a1, a1, a2, a3, _a2, _a3);
1062  _DPP_DELEGATE_BIND(199, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 2, 6, 7), _a0, _a1, _a2, a0, a1, a2, _a3, _a4);
1063  _DPP_DELEGATE_BIND(200, 5, 3, _DPP_DELEGATE_BTDEFS(3, 3, 6, 7), a0, a1, a2, _a0, a3, a4, _a1, _a2);
1064  _DPP_DELEGATE_BIND(201, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 3, 6, 7), _a0, a0, a1, _a1, a2, a3, _a2, _a3);
1065  _DPP_DELEGATE_BIND(202, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 3, 6, 7), a0, _a0, a1, _a1, a2, a3, _a2, _a3);
1066  _DPP_DELEGATE_BIND(203, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 3, 6, 7), _a0, _a1, a0, _a2, a1, a2, _a3, _a4);
1067  _DPP_DELEGATE_BIND(204, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 3, 6, 7), a0, a1, _a0, _a1, a2, a3, _a2, _a3);
1068  _DPP_DELEGATE_BIND(205, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 3, 6, 7), _a0, a0, _a1, _a2, a1, a2, _a3, _a4);
1069  _DPP_DELEGATE_BIND(206, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 3, 6, 7), a0, _a0, _a1, _a2, a1, a2, _a3, _a4);
1070  _DPP_DELEGATE_BIND(207, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 3, 6, 7), _a0, _a1, _a2, _a3, a0, a1, _a4, _a5);
1071  _DPP_DELEGATE_BIND(208, 5, 3, _DPP_DELEGATE_BTDEFS(3, 4, 6, 7), a0, a1, a2, a3, _a0, a4, _a1, _a2);
1072  _DPP_DELEGATE_BIND(209, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 4, 6, 7), _a0, a0, a1, a2, _a1, a3, _a2, _a3);
1073  _DPP_DELEGATE_BIND(210, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 4, 6, 7), a0, _a0, a1, a2, _a1, a3, _a2, _a3);
1074  _DPP_DELEGATE_BIND(211, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 4, 6, 7), _a0, _a1, a0, a1, _a2, a2, _a3, _a4);
1075  _DPP_DELEGATE_BIND(212, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 4, 6, 7), a0, a1, _a0, a2, _a1, a3, _a2, _a3);
1076  _DPP_DELEGATE_BIND(213, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 4, 6, 7), _a0, a0, _a1, a1, _a2, a2, _a3, _a4);
1077  _DPP_DELEGATE_BIND(214, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 4, 6, 7), a0, _a0, _a1, a1, _a2, a2, _a3, _a4);
1078  _DPP_DELEGATE_BIND(215, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 4, 6, 7), _a0, _a1, _a2, a0, _a3, a1, _a4, _a5);
1079  _DPP_DELEGATE_BIND(216, 4, 4, _DPP_DELEGATE_BTDEFS(4, 3, 4, 6, 7), a0, a1, a2, _a0, _a1, a3, _a2, _a3);
1080  _DPP_DELEGATE_BIND(217, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 3, 4, 6, 7), _a0, a0, a1, _a1, _a2, a2, _a3, _a4);
1081  _DPP_DELEGATE_BIND(218, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 3, 4, 6, 7), a0, _a0, a1, _a1, _a2, a2, _a3, _a4);
1082  _DPP_DELEGATE_BIND(219, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 3, 4, 6, 7), _a0, _a1, a0, _a2, _a3, a1, _a4, _a5);
1083  _DPP_DELEGATE_BIND(220, 3, 5, _DPP_DELEGATE_BTDEFS(5, 2, 3, 4, 6, 7), a0, a1, _a0, _a1, _a2, a2, _a3, _a4);
1084  _DPP_DELEGATE_BIND(221, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 2, 3, 4, 6, 7), _a0, a0, _a1, _a2, _a3, a1, _a4, _a5);
1085  _DPP_DELEGATE_BIND(222, 2, 6, _DPP_DELEGATE_BTDEFS(6, 1, 2, 3, 4, 6, 7), a0, _a0, _a1, _a2, _a3, a1, _a4, _a5);
1086  _DPP_DELEGATE_BIND(223, 1, 7, _DPP_DELEGATE_BTDEFS(7, 0, 1, 2, 3, 4, 6, 7), _a0, _a1, _a2, _a3, _a4, a0, _a5, _a6);
1087  _DPP_DELEGATE_BIND(224, 5, 3, _DPP_DELEGATE_BTDEFS(3, 5, 6, 7), a0, a1, a2, a3, a4, _a0, _a1, _a2);
1088  _DPP_DELEGATE_BIND(225, 4, 4, _DPP_DELEGATE_BTDEFS(4, 0, 5, 6, 7), _a0, a0, a1, a2, a3, _a1, _a2, _a3);
1089  _DPP_DELEGATE_BIND(226, 4, 4, _DPP_DELEGATE_BTDEFS(4, 1, 5, 6, 7), a0, _a0, a1, a2, a3, _a1, _a2, _a3);
1090  _DPP_DELEGATE_BIND(227, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 1, 5, 6, 7), _a0, _a1, a0, a1, a2, _a2, _a3, _a4);
1091  _DPP_DELEGATE_BIND(228, 4, 4, _DPP_DELEGATE_BTDEFS(4, 2, 5, 6, 7), a0, a1, _a0, a2, a3, _a1, _a2, _a3);
1092  _DPP_DELEGATE_BIND(229, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 2, 5, 6, 7), _a0, a0, _a1, a1, a2, _a2, _a3, _a4);
1093  _DPP_DELEGATE_BIND(230, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 2, 5, 6, 7), a0, _a0, _a1, a1, a2, _a2, _a3, _a4);
1094  _DPP_DELEGATE_BIND(231, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 2, 5, 6, 7), _a0, _a1, _a2, a0, a1, _a3, _a4, _a5);
1095  _DPP_DELEGATE_BIND(232, 4, 4, _DPP_DELEGATE_BTDEFS(4, 3, 5, 6, 7), a0, a1, a2, _a0, a3, _a1, _a2, _a3);
1096  _DPP_DELEGATE_BIND(233, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 3, 5, 6, 7), _a0, a0, a1, _a1, a2, _a2, _a3, _a4);
1097  _DPP_DELEGATE_BIND(234, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 3, 5, 6, 7), a0, _a0, a1, _a1, a2, _a2, _a3, _a4);
1098  _DPP_DELEGATE_BIND(235, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 3, 5, 6, 7), _a0, _a1, a0, _a2, a1, _a3, _a4, _a5);
1099  _DPP_DELEGATE_BIND(236, 3, 5, _DPP_DELEGATE_BTDEFS(5, 2, 3, 5, 6, 7), a0, a1, _a0, _a1, a2, _a2, _a3, _a4);
1100  _DPP_DELEGATE_BIND(237, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 2, 3, 5, 6, 7), _a0, a0, _a1, _a2, a1, _a3, _a4, _a5);
1101  _DPP_DELEGATE_BIND(238, 2, 6, _DPP_DELEGATE_BTDEFS(6, 1, 2, 3, 5, 6, 7), a0, _a0, _a1, _a2, a1, _a3, _a4, _a5);
1102  _DPP_DELEGATE_BIND(239, 1, 7, _DPP_DELEGATE_BTDEFS(7, 0, 1, 2, 3, 5, 6, 7), _a0, _a1, _a2, _a3, a0, _a4, _a5, _a6);
1103  _DPP_DELEGATE_BIND(240, 4, 4, _DPP_DELEGATE_BTDEFS(4, 4, 5, 6, 7), a0, a1, a2, a3, _a0, _a1, _a2, _a3);
1104  _DPP_DELEGATE_BIND(241, 3, 5, _DPP_DELEGATE_BTDEFS(5, 0, 4, 5, 6, 7), _a0, a0, a1, a2, _a1, _a2, _a3, _a4);
1105  _DPP_DELEGATE_BIND(242, 3, 5, _DPP_DELEGATE_BTDEFS(5, 1, 4, 5, 6, 7), a0, _a0, a1, a2, _a1, _a2, _a3, _a4);
1106  _DPP_DELEGATE_BIND(243, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 1, 4, 5, 6, 7), _a0, _a1, a0, a1, _a2, _a3, _a4, _a5);
1107  _DPP_DELEGATE_BIND(244, 3, 5, _DPP_DELEGATE_BTDEFS(5, 2, 4, 5, 6, 7), a0, a1, _a0, a2, _a1, _a2, _a3, _a4);
1108  _DPP_DELEGATE_BIND(245, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 2, 4, 5, 6, 7), _a0, a0, _a1, a1, _a2, _a3, _a4, _a5);
1109  _DPP_DELEGATE_BIND(246, 2, 6, _DPP_DELEGATE_BTDEFS(6, 1, 2, 4, 5, 6, 7), a0, _a0, _a1, a1, _a2, _a3, _a4, _a5);
1110  _DPP_DELEGATE_BIND(247, 1, 7, _DPP_DELEGATE_BTDEFS(7, 0, 1, 2, 4, 5, 6, 7), _a0, _a1, _a2, a0, _a3, _a4, _a5, _a6);
1111  _DPP_DELEGATE_BIND(248, 3, 5, _DPP_DELEGATE_BTDEFS(5, 3, 4, 5, 6, 7), a0, a1, a2, _a0, _a1, _a2, _a3, _a4);
1112  _DPP_DELEGATE_BIND(249, 2, 6, _DPP_DELEGATE_BTDEFS(6, 0, 3, 4, 5, 6, 7), _a0, a0, a1, _a1, _a2, _a3, _a4, _a5);
1113  _DPP_DELEGATE_BIND(250, 2, 6, _DPP_DELEGATE_BTDEFS(6, 1, 3, 4, 5, 6, 7), a0, _a0, a1, _a1, _a2, _a3, _a4, _a5);
1114  _DPP_DELEGATE_BIND(251, 1, 7, _DPP_DELEGATE_BTDEFS(7, 0, 1, 3, 4, 5, 6, 7), _a0, _a1, a0, _a2, _a3, _a4, _a5, _a6);
1115  _DPP_DELEGATE_BIND(252, 2, 6, _DPP_DELEGATE_BTDEFS(6, 2, 3, 4, 5, 6, 7), a0, a1, _a0, _a1, _a2, _a3, _a4, _a5);
1116  _DPP_DELEGATE_BIND(253, 1, 7, _DPP_DELEGATE_BTDEFS(7, 0, 2, 3, 4, 5, 6, 7), _a0, a0, _a1, _a2, _a3, _a4, _a5, _a6);
1117  _DPP_DELEGATE_BIND(254, 1, 7, _DPP_DELEGATE_BTDEFS(7, 1, 2, 3, 4, 5, 6, 7), a0, _a0, _a1, _a2, _a3, _a4, _a5, _a6);
1118  _DPP_DELEGATE_BIND(255, 0, 8, _DPP_DELEGATE_BTDEFS(8, 0, 1, 2, 3, 4, 5, 6, 7), _a0, _a1, _a2, _a3, _a4, _a5, _a6, _a7);
1119#endif
1120
1121#if DPP_DELEGATE_ARGC > 8
1122# error DPP_DELEGATE_ARGC > 8 not supported
1123#endif
1124
1125  //////////////////////////////////////////////////////////////////////
1126  //    container push delegate class
1127  //////////////////////////////////////////////////////////////////////
1128
1129  template <class X, int id, bool smart, class ItemBase>
1130  class linked_list;
1131
1132  /** @internal */
1133  template <class Container>
1134  struct delegate_push_types
1135  {
1136    typedef typename Container::const_reference arg;
1137  };
1138
1139  /** @internal */
1140  template <class X, int id, bool smart, class ItemBase>
1141  struct delegate_push_types <linked_list<X, id, smart, ItemBase> >
1142  {
1143    typedef _DPP_DR106(X) & arg;
1144  };
1145
1146  /** @internal */
1147  template <class A0, class PushArg>
1148  struct delegate_push_ptr
1149  {
1150    typedef PushArg arg;
1151    static _DPP_DR106(PushArg) & get(_DPP_DR106(A0) &a0)
1152    {
1153      return a0;
1154    }
1155  };
1156
1157  /** @internal */
1158  template <class A0, class PushArg>
1159  struct delegate_push_ptr<A0, PushArg* const &>
1160  {
1161    typedef PushArg * const & arg;
1162    static PushArg * get(_DPP_DR106(A0) &a0)
1163    {
1164      return &a0;
1165    }
1166  };
1167
1168  /**
1169     @short Container push delegate class
1170     @main
1171     @header dpp/delegate
1172     @prototype template <typename Container, typename A0 = [...], void (Container::*PushFunc)([...]) = &Container::push_back>
1173
1174     This delegate class push items on container on invocation.
1175
1176     @param Container Container type
1177     @param A0 Type of single argument of delegate prototype
1178     @param PushArg Type of container push function argument
1179     @param Push Container push member function, default is @tt push_back
1180
1181     Usage example:
1182     @example test/test_delegate.cc:push|push1
1183     Usage with value argument type instead of reference:
1184     @example test/test_delegate.cc:push|push2
1185     Usage with container @tt push_front function:
1186     @example test/test_delegate.cc:push|push3
1187     Usage with pointers container:
1188     @example test/test_delegate.cc:push4
1189  */
1190  template <typename Container,
1191            typename A0 = typename delegate_push_types<Container>::arg,
1192            void (Container::*PushFunc)(
1193              typename delegate_push_ptr<A0,
1194                typename delegate_push_types<Container>::arg>::arg
1195            ) = &Container::push_back>
1196  class delegate_push
1197    : public delegate< void (A0) >
1198  {
1199  public:
1200
1201    delegate_push()
1202      : _cont(0)
1203    {
1204    }
1205
1206    delegate_push(Container &cont)
1207      : _cont(&cont)
1208    {
1209    }
1210
1211    void operator()(A0 a0) const
1212    {
1213      return delegate_push::call(a0);
1214    }
1215
1216    bool valid() const
1217    {
1218      return _cont;
1219    }
1220
1221  private:
1222    void call(A0 a0) const
1223    {
1224      (_cont->*PushFunc)(delegate_push_ptr<A0, typename delegate_push_types<Container>::arg>::get(a0));
1225    }
1226
1227    Container *_cont;
1228  };
1229
1230//////////////////////////////////////////////////////////////////////
1231//      container iterator delegate class
1232//////////////////////////////////////////////////////////////////////
1233
1234/** @internal */
1235template <class C> struct delegate_iterate_types
1236{
1237  typedef typename C::iterator iterator;
1238  typedef typename C::value_type & reference;
1239};
1240
1241/** @internal */
1242template <class C> struct delegate_iterate_types <const C>
1243{
1244  typedef typename C::const_iterator iterator;
1245  typedef const typename C::value_type & reference;
1246};
1247
1248/**
1249   @short Container traversal delegate class
1250   @main
1251   @header dpp/delegate
1252
1253   This delegate class can be used to returns each item present in
1254   associated container.
1255
1256   @param Container Container type
1257   @param R Return type of delegate prototype
1258
1259   Usage example:
1260   @example test/test_delegate.cc:push|iter1
1261*/
1262template <typename Container,
1263          typename R = typename delegate_iterate_types<Container>::reference>
1264class delegate_iterate
1265  : public delegate< R () >
1266{
1267public:
1268
1269  typedef typename delegate_iterate_types<Container>::iterator iterator;
1270
1271  delegate_iterate(Container &cont)
1272    : _i(cont.begin()),
1273      _end(cont.end())
1274  {
1275  }
1276
1277  delegate_iterate(const iterator &begin, const iterator &end)
1278    : _i(begin),
1279      _end(end)
1280  {
1281  }
1282
1283  /** Test if container end has been reached. */
1284  bool valid() const
1285  {
1286    return _i != _end;
1287  }
1288
1289  R operator()() const
1290  {
1291    return delegate_iterate::call();
1292  }
1293
1294private:
1295  R call() const
1296  {
1297    delegate_iterate *_this = const_cast<delegate_iterate*>(this);
1298    return *_this->_i++;
1299  }
1300
1301  iterator _i;
1302  iterator _end;
1303};
1304
1305//////////////////////////////////////////////////////////////////////
1306//      container output delegate class
1307//////////////////////////////////////////////////////////////////////
1308
1309/**
1310   @short Standard stream output delegate class
1311   @main
1312   @header dpp/delegate
1313
1314   This delegate class can be used to write to a @ref std::ostream
1315   stream on invocation.
1316
1317   A separator string which is output after each value may be
1318   specified.
1319
1320   @param Container Container type
1321   @param A0 Type of single argument of delegate prototype
1322
1323   Usage example:
1324   @example test/test_delegate.cc:ostream
1325*/
1326template <typename A0>
1327class delegate_ostream
1328  : public delegate< void (A0) >
1329{
1330public:
1331
1332  delegate_ostream()
1333    : _out(0)
1334  {
1335  }
1336
1337  delegate_ostream(std::ostream &out, const char *sep = "")
1338    : _out(&out),
1339      _sep(sep)
1340  {
1341  }
1342
1343  /** @This returns @ref std::ostream::good function result on stream. */
1344  bool valid() const
1345  {
1346    return _out && _out->good();
1347  }
1348
1349  void operator()(A0 a0) const
1350  {
1351    return delegate_ostream::call(a0);
1352  }
1353
1354private:
1355  void call(A0 a0) const
1356  {
1357    *_out << a0 << _sep;
1358  }
1359
1360  std::ostream *_out;
1361  const char *_sep;
1362};
1363
1364
1365//////////////////////////////////////////////////////////////////////
1366//      container input delegate class
1367//////////////////////////////////////////////////////////////////////
1368
1369/**
1370   @short Standard stream input delegate class
1371   @main
1372   @header dpp/delegate
1373
1374   This delegate class can be used to read from a @ref std::istream
1375   stream on invocation.
1376
1377   Usage example:
1378   @example test/test_delegate.cc:istream
1379*/
1380template <typename R>
1381class delegate_istream
1382  : public delegate< R () >
1383{
1384public:
1385
1386  delegate_istream(std::istream &in)
1387    : _in(&in)
1388  {
1389  }
1390
1391  /** @This returns @ref std::istream::good function result on stream. */
1392  bool valid() const
1393  {
1394    return _in && _in->good();
1395  }
1396
1397  R operator()() const
1398  {
1399    return delegate_istream::call();
1400  }
1401
1402private:
1403  R call() const
1404  {
1405    R r;
1406    *_in >> r;
1407    return r;
1408  }
1409
1410  std::istream *_in;
1411};
1412
1413
1414//////////////////////////////////////////////////////////////////////
1415//      user delegate class definition macros
1416//////////////////////////////////////////////////////////////////////
1417
1418#define _DPP_DELEGATE_X(a, b) a##b
1419#define _DPP_DELEGATE_NAME(l) _DPP_DELEGATE_X(_my_delegate, l)
1420
1421/** @This provides a convenient way to write custom delegate types.
1422    @see {#DPP_DELEGATE0_OBJ, #DPP_DELEGATE1_TYPE}
1423
1424    @example test/test_delegate.cc:my0
1425    @showcontent
1426 */
1427#define DPP_DELEGATE0_TYPE(return_type, args_list, ...) \
1428  class : public dpp::delegate< return_type args_list > \
1429  {                                                     \
1430    bool valid() const                                  \
1431    {                                                   \
1432      return true;                                      \
1433    }                                                   \
1434                                                        \
1435    return_type call args_list const                    \
1436    {                                                   \
1437      __VA_ARGS__;                                      \
1438    }                                                   \
1439  }
1440
1441/** @see {#DPP_DELEGATE0_TYPE} @showcontent */
1442# define DPP_DELEGATE0_OBJ(name, return_type, args_list, ...) \
1443  DPP_DELEGATE0_TYPE(return_type, args_list, __VA_ARGS__) name
1444
1445#if DPP_DELEGATE_ARGC >= 1
1446
1447/** @see {#DPP_DELEGATE1_OBJ, #DPP_DELEGATE0_TYPE} @showcontent */
1448# define DPP_DELEGATE1_TYPE(return_type, args_list, data0_type, ...)    \
1449  class _DPP_DELEGATE_NAME(__LINE__)                                    \
1450    : public dpp::delegate< return_type args_list >                     \
1451  {                                                                     \
1452  public:                                                               \
1453    _DPP_DELEGATE_NAME(__LINE__)(data0_type data0)                      \
1454      : _0(data0)                                                       \
1455    {}                                                                  \
1456  private:                                                              \
1457    bool valid() const                                                  \
1458    {                                                                   \
1459      return true;                                                      \
1460    }                                                                   \
1461                                                                        \
1462    return_type call args_list const                                    \
1463    {                                                                   \
1464      __VA_ARGS__;                                                      \
1465    }                                                                   \
1466                                                                        \
1467    data0_type _0;                                                      \
1468  }
1469
1470/** @This provides a convenient way to create custom delegate
1471    objects.
1472
1473    One or more data fields can be embedded in delegate object by
1474    using one of the @tt DPP_DELEGATEn_OBJ macros:
1475
1476    @example test/test_delegate.cc:my1
1477    @showcontent
1478
1479    @see {#DPP_DELEGATE1_TYPE, #DPP_DELEGATEO_OBJ,
1480    #DPP_DELEGATE2_OBJ, #DPP_DELEGATE3_OBJ, #DPP_DELEGATE4_OBJ}
1481*/
1482# define DPP_DELEGATE1_OBJ(name, return_type, args_list, data0_type, init0, ...) \
1483  DPP_DELEGATE1_TYPE(return_type, args_list, data0_type, __VA_ARGS__)   \
1484  name(init0)
1485
1486#endif
1487
1488#if DPP_DELEGATE_ARGC >= 2
1489
1490/** @see {#DPP_DELEGATE2_OBJ, #DPP_DELEGATE1_TYPE} */
1491# define DPP_DELEGATE2_TYPE(return_type, args_list, data0_type, data1_type, ...) \
1492  class _DPP_DELEGATE_NAME(__LINE__)                                    \
1493    : public dpp::delegate< return_type args_list >                     \
1494  {                                                                     \
1495  public:                                                               \
1496    _DPP_DELEGATE_NAME(__LINE__)(data0_type data0, data1_type data1)    \
1497      : _0(data0), _1(data1)                                            \
1498    {}                                                                  \
1499  private:                                                              \
1500    bool valid() const                                                  \
1501    {                                                                   \
1502      return true;                                                      \
1503    }                                                                   \
1504                                                                        \
1505    return_type call args_list const                                    \
1506    {                                                                   \
1507      __VA_ARGS__;                                                      \
1508    }                                                                   \
1509                                                                        \
1510    data0_type _0;                                                      \
1511    data1_type _1;                                                      \
1512  }
1513
1514/** @see {#DPP_DELEGATE2_TYPE, #DPP_DELEGATE1_OBJ} */
1515# define DPP_DELEGATE2_OBJ(name, return_type, args_list, data0_type, init0, data1_type, init1, ...) \
1516  DPP_DELEGATE2_TYPE(return_type, args_list, data0_type, data1_type, __VA_ARGS__) \
1517  name(init0, init1)
1518
1519#endif
1520
1521#if DPP_DELEGATE_ARGC >= 3
1522
1523/** @see {#DPP_DELEGATE3_OBJ, #DPP_DELEGATE1_TYPE} */
1524# define DPP_DELEGATE3_TYPE(return_type, args_list, data0_type, data1_type, data2_type, ...) \
1525  class _DPP_DELEGATE_NAME(__LINE__)                                    \
1526    : public dpp::delegate< return_type args_list >                     \
1527  {                                                                     \
1528  public:                                                               \
1529    _DPP_DELEGATE_NAME(__LINE__)(data0_type data0, data1_type data1, data2_type data2) \
1530      : _0(data0), _1(data1), _2(data2)                                 \
1531    {}                                                                  \
1532  private:                                                              \
1533    bool valid() const                                                  \
1534    {                                                                   \
1535      return true;                                                      \
1536    }                                                                   \
1537                                                                        \
1538    return_type call args_list const                                    \
1539    {                                                                   \
1540      __VA_ARGS__;                                                      \
1541    }                                                                   \
1542                                                                        \
1543    data0_type _0;                                                      \
1544    data1_type _1;                                                      \
1545    data2_type _2;                                                      \
1546  }
1547
1548/** @see {#DPP_DELEGATE3_TYPE, #DPP_DELEGATE1_OBJ} */
1549# define DPP_DELEGATE3_OBJ(name, return_type, args_list, data0_type, init0, data1_type, init1, data2_type, init2, ...)  \
1550  DPP_DELEGATE3_TYPE(return_type, args_list, data0_type, data1_type, data2_type, __VA_ARGS__)  \
1551    name(init0, init1, init2)
1552
1553#endif
1554
1555#if DPP_DELEGATE_ARGC >= 4
1556
1557/** @see {#DPP_DELEGATE4_OBJ, #DPP_DELEGATE1_TYPE} */
1558# define DPP_DELEGATE4_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, ...) \
1559  class _DPP_DELEGATE_NAME(__LINE__)                                    \
1560    : public dpp::delegate< return_type args_list >                     \
1561  {                                                                     \
1562  public:                                                               \
1563    _DPP_DELEGATE_NAME(__LINE__)(data0_type data0, data1_type data1, data2_type data2, data3_type data3) \
1564      : _0(data0), _1(data1), _2(data2), _3(data3)                      \
1565    {}                                                                  \
1566  private:                                                              \
1567    bool valid() const                                                  \
1568    {                                                                   \
1569      return true;                                                      \
1570    }                                                                   \
1571                                                                        \
1572    return_type call args_list const                                    \
1573    {                                                                   \
1574      __VA_ARGS__;                                                      \
1575    }                                                                   \
1576                                                                        \
1577    data0_type _0;                                                      \
1578    data1_type _1;                                                      \
1579    data2_type _2;                                                      \
1580    data3_type _3;                                                      \
1581  }
1582
1583/** @see {#DPP_DELEGATE4_TYPE, #DPP_DELEGATE1_OBJ} */
1584# define DPP_DELEGATE4_OBJ(name, return_type, args_list, data0_type, init0, data1_type, init1, data2_type, init2, data3_type, init3, ...)  \
1585  DPP_DELEGATE4_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, __VA_ARGS__)  \
1586    name(init0, init1, init2, init3)
1587
1588#endif
1589
1590#if DPP_DELEGATE_ARGC >= 5 // mkdoc:skip
1591
1592/** @see {#DPP_DELEGATE5_OBJ, #DPP_DELEGATE1_TYPE} */
1593# define DPP_DELEGATE5_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, data4_type, ...) \
1594  class _DPP_DELEGATE_NAME(__LINE__)                                    \
1595    : public dpp::delegate< return_type args_list >                     \
1596  {                                                                     \
1597  public:                                                               \
1598    _DPP_DELEGATE_NAME(__LINE__)(data0_type data0, data1_type data1, data2_type data2, data3_type data3, data4_type data4) \
1599      : _0(data0), _1(data1), _2(data2), _3(data3), _4(data4)           \
1600    {}                                                                  \
1601  private:                                                              \
1602    bool valid() const                                                  \
1603    {                                                                   \
1604      return true;                                                      \
1605    }                                                                   \
1606                                                                        \
1607    return_type call args_list const                                    \
1608    {                                                                   \
1609      __VA_ARGS__;                                                      \
1610    }                                                                   \
1611                                                                        \
1612    data0_type _0;                                                      \
1613    data1_type _1;                                                      \
1614    data2_type _2;                                                      \
1615    data3_type _3;                                                      \
1616    data4_type _4;                                                      \
1617  }
1618
1619/** @see {#DPP_DELEGATE5_TYPE, #DPP_DELEGATE1_OBJ} */
1620# define DPP_DELEGATE5_OBJ(name, return_type, args_list, data0_type, init0, data1_type, init1, data2_type, init2, data3_type, init3, data4_type, init4, ...)  \
1621  DPP_DELEGATE5_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, data4_type, __VA_ARGS__)  \
1622    name(init0, init1, init2, init3, init4)
1623
1624#endif
1625
1626#if DPP_DELEGATE_ARGC >= 6 // mkdoc:skip
1627
1628/** @see {#DPP_DELEGATE6_OBJ, #DPP_DELEGATE1_TYPE} */
1629# define DPP_DELEGATE6_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, data4_type, data5_type, ...) \
1630  class _DPP_DELEGATE_NAME(__LINE__)                                    \
1631    : public dpp::delegate< return_type args_list >                     \
1632  {                                                                     \
1633  public:                                                               \
1634    _DPP_DELEGATE_NAME(__LINE__)(data0_type data0, data1_type data1, data2_type data2, data3_type data3, data4_type data4, data5_type data5) \
1635      : _0(data0), _1(data1), _2(data2), _3(data3), _4(data4), _5(data5) \
1636    {}                                                                  \
1637  private:                                                              \
1638    bool valid() const                                                  \
1639    {                                                                   \
1640      return true;                                                      \
1641    }                                                                   \
1642                                                                        \
1643    return_type call args_list const                                    \
1644    {                                                                   \
1645      __VA_ARGS__;                                                      \
1646    }                                                                   \
1647                                                                        \
1648    data0_type _0;                                                      \
1649    data1_type _1;                                                      \
1650    data2_type _2;                                                      \
1651    data3_type _3;                                                      \
1652    data4_type _4;                                                      \
1653    data5_type _5;                                                      \
1654  }
1655
1656/** @see {#DPP_DELEGATE6_TYPE, #DPP_DELEGATE1_OBJ} */
1657# define DPP_DELEGATE6_OBJ(name, return_type, args_list, data0_type, init0, data1_type, init1, data2_type, init2, data3_type, init3, data4_type, init4, data5_type, init5, ...)  \
1658  DPP_DELEGATE6_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, data4_type, data5_type, __VA_ARGS__)  \
1659    name(init0, init1, init2, init3, init4, init5)
1660
1661#endif
1662
1663#if DPP_DELEGATE_ARGC >= 7 // mkdoc:skip
1664
1665/** @see {#DPP_DELEGATE7_OBJ, #DPP_DELEGATE1_TYPE} */
1666# define DPP_DELEGATE7_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, data4_type, data5_type, data6_type, ...) \
1667  class _DPP_DELEGATE_NAME(__LINE__)                                    \
1668    : public dpp::delegate< return_type args_list >                     \
1669  {                                                                     \
1670  public:                                                               \
1671    _DPP_DELEGATE_NAME(__LINE__)(data0_type data0, data1_type data1, data2_type data2, data3_type data3, data4_type data4, data5_type data5, data6_type data6) \
1672      : _0(data0), _1(data1), _2(data2), _3(data3), _4(data4), _5(data5), _6(data6) \
1673    {}                                                                  \
1674  private:                                                              \
1675    bool valid() const                                                  \
1676    {                                                                   \
1677      return true;                                                      \
1678    }                                                                   \
1679                                                                        \
1680    return_type call args_list const                                    \
1681    {                                                                   \
1682      __VA_ARGS__;                                                      \
1683    }                                                                   \
1684                                                                        \
1685    data0_type _0;                                                      \
1686    data1_type _1;                                                      \
1687    data2_type _2;                                                      \
1688    data3_type _3;                                                      \
1689    data4_type _4;                                                      \
1690    data5_type _5;                                                      \
1691    data6_type _6;                                                      \
1692  }
1693
1694/** @see {#DPP_DELEGATE7_TYPE, #DPP_DELEGATE1_OBJ} */
1695# define DPP_DELEGATE7_OBJ(name, return_type, args_list, data0_type, init0, data1_type, init1, data2_type, init2, data3_type, init3, data4_type, init4, data5_type, init5, data6_type, init6, ...)  \
1696  DPP_DELEGATE7_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, data4_type, data5_type, data6_type, __VA_ARGS__)  \
1697    name(init0, init1, init2, init3, init4, init5, init6)
1698
1699#endif
1700
1701#if DPP_DELEGATE_ARGC >= 8 // mkdoc:skip
1702
1703/** @see {#DPP_DELEGATE8_OBJ, #DPP_DELEGATE1_TYPE} */
1704# define DPP_DELEGATE8_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, data4_type, data5_type, data6_type, data7_type, ...) \
1705  class _DPP_DELEGATE_NAME(__LINE__)                                    \
1706    : public dpp::delegate< return_type args_list >                     \
1707  {                                                                     \
1708  public:                                                               \
1709    _DPP_DELEGATE_NAME(__LINE__)(data0_type data0, data1_type data1, data2_type data2, data3_type data3, data4_type data4, data5_type data5, data6_type data6, data7_type data7) \
1710      : _0(data0), _1(data1), _2(data2), _3(data3), _4(data4), _5(data5), _6(data6), _7(data7) \
1711    {}                                                                  \
1712  private:                                                              \
1713    bool valid() const                                                  \
1714    {                                                                   \
1715      return true;                                                      \
1716    }                                                                   \
1717                                                                        \
1718    return_type call args_list const                                    \
1719    {                                                                   \
1720      __VA_ARGS__;                                                      \
1721    }                                                                   \
1722                                                                        \
1723    data0_type _0;                                                      \
1724    data1_type _1;                                                      \
1725    data2_type _2;                                                      \
1726    data3_type _3;                                                      \
1727    data4_type _4;                                                      \
1728    data5_type _5;                                                      \
1729    data6_type _6;                                                      \
1730    data7_type _7;                                                      \
1731  }
1732
1733/** @see {#DPP_DELEGATE8_TYPE, #DPP_DELEGATE1_OBJ} */
1734# define DPP_DELEGATE8_OBJ(name, return_type, args_list, data0_type, init0, data1_type, init1, data2_type, init2, data3_type, init3, data4_type, init4, data5_type, init5, data6_type, init6, data7_type, init7, ...)  \
1735  DPP_DELEGATE8_TYPE(return_type, args_list, data0_type, data1_type, data2_type, data3_type, data4_type, data5_type, data6_type, data7_type, __VA_ARGS__)  \
1736    name(init0, init1, init2, init3, init4, init5, init6, init7)
1737
1738#endif
1739
1740}
1741
1742#endif
1743
Note: See TracBrowser for help on using the repository browser.