rice 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/Doxyfile +1 -1
  2. data/Makefile.in +3 -2
  3. data/README +247 -16
  4. data/aclocal.m4 +62 -51
  5. data/configure +1585 -1456
  6. data/extconf.rb +9 -1
  7. data/rice/Arg.hpp +8 -0
  8. data/rice/Arg_impl.hpp +124 -0
  9. data/rice/Arg_operators.cpp +21 -0
  10. data/rice/Arg_operators.hpp +19 -0
  11. data/rice/Constructor.hpp +150 -0
  12. data/rice/Data_Type.ipp +51 -6
  13. data/rice/Director.cpp +19 -0
  14. data/rice/Director.hpp +47 -0
  15. data/rice/Enum.hpp +2 -3
  16. data/rice/Enum.ipp +1 -1
  17. data/rice/Hash.hpp +1 -1
  18. data/rice/Makefile.am +7 -0
  19. data/rice/Makefile.in +18 -7
  20. data/rice/Module_impl.hpp +36 -3
  21. data/rice/Module_impl.ipp +56 -7
  22. data/rice/VM.cpp +2 -2
  23. data/rice/config.hpp +1 -1
  24. data/rice/detail/Arguments.hpp +118 -0
  25. data/rice/detail/Auto_Function_Wrapper.hpp +206 -96
  26. data/rice/detail/Auto_Function_Wrapper.ipp +1687 -144
  27. data/rice/detail/Auto_Member_Function_Wrapper.hpp +234 -123
  28. data/rice/detail/Auto_Member_Function_Wrapper.ipp +1133 -306
  29. data/rice/detail/Caster.hpp +3 -1
  30. data/rice/detail/creation_funcs.hpp +0 -8
  31. data/rice/detail/creation_funcs.ipp +1 -27
  32. data/rice/detail/define_method_and_auto_wrap.hpp +3 -1
  33. data/rice/detail/define_method_and_auto_wrap.ipp +4 -3
  34. data/rice/detail/object_call.ipp +1 -1
  35. data/rice/detail/ruby.hpp +1 -33
  36. data/rice/detail/wrap_function.hpp +103 -48
  37. data/rice/detail/wrap_function.ipp +154 -96
  38. data/rice/generate_code.rb +520 -55
  39. data/rice/global_function.hpp +12 -1
  40. data/rice/global_function.ipp +14 -2
  41. data/ruby/Makefile.in +5 -4
  42. data/ruby/lib/Makefile.in +4 -3
  43. data/ruby/lib/version.rb +1 -1
  44. data/sample/Makefile.in +4 -3
  45. data/test/Makefile.am +2 -0
  46. data/test/Makefile.in +32 -13
  47. data/test/test_Class.cpp +36 -14
  48. data/test/test_Constructor.cpp +176 -1
  49. data/test/test_Data_Type.cpp +121 -0
  50. data/test/test_Director.cpp +225 -0
  51. data/test/test_Enum.cpp +33 -0
  52. data/test/test_Module.cpp +175 -0
  53. data/test/test_global_functions.cpp +70 -1
  54. metadata +27 -7
@@ -17,32 +17,62 @@ namespace Rice
17
17
  namespace detail
18
18
  {
19
19
 
20
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T, typename Arg15_T>
21
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
20
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T, typename Arg15_T>
21
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
22
22
  Auto_Member_Function_Wrapper(
23
23
  Func func,
24
- Data_Object<Exception_Handler> handler)
24
+ Data_Object<Exception_Handler> handler,
25
+ Arguments* arguments)
25
26
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
26
27
  , func_(func)
27
28
  , handler_(handler)
28
29
  , handler_guard_(&handler_)
30
+ , arguments_(arguments)
29
31
  {
32
+ if(arguments == 0) {
33
+ arguments_ = new Arguments();
34
+ } else {
35
+ arguments_ = arguments;
36
+ }
30
37
  }
31
38
 
32
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T, typename Arg15_T>
33
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
34
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11, VALUE ruby_arg12, VALUE ruby_arg13, VALUE ruby_arg14, VALUE ruby_arg15)
39
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T, typename Arg15_T>
40
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
41
+ call(int argc, VALUE* argv, VALUE self)
35
42
  {
36
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> * wrapper = 0;
43
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> * wrapper = 0;
37
44
  try
38
45
  {
39
46
  Data_Object<Wrapped_Function> data(detail::method_data());
40
47
  wrapper =
41
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> *)data.get();
48
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> *)data.get();
49
+ Arguments* args = wrapper->arguments_;
50
+
51
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11, varg12, varg13, varg14, varg15;
52
+
53
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
54
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11, &varg12, &varg13, &varg14, &varg15);
55
+
42
56
  Self_T * obj = from_ruby<Self_T *>(self);
43
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13)); Arg14_T arg14(from_ruby<Arg14_T>(ruby_arg14)); Arg15_T arg15(from_ruby<Arg15_T>(ruby_arg15));
57
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
58
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
59
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
60
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
61
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
62
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
63
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
64
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
65
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
66
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
67
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
68
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
69
+ Arg12_T arg12 = args->getArgumentOrDefault<Arg12_T>(12, varg12);
70
+ Arg13_T arg13 = args->getArgumentOrDefault<Arg13_T>(13, varg13);
71
+ Arg14_T arg14 = args->getArgumentOrDefault<Arg14_T>(14, varg14);
72
+ Arg15_T arg15 = args->getArgumentOrDefault<Arg15_T>(15, varg15);
73
+
44
74
  Func func = wrapper->func_;
45
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15));
75
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15));
46
76
  }
47
77
  catch(...)
48
78
  {
@@ -61,32 +91,62 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
61
91
  }
62
92
  }
63
93
 
64
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T, typename Arg15_T>
65
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
94
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T, typename Arg15_T>
95
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
66
96
  Auto_Member_Function_Wrapper(
67
97
  Func func,
68
- Data_Object<Exception_Handler> handler)
98
+ Data_Object<Exception_Handler> handler,
99
+ Arguments* arguments)
69
100
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
70
101
  , func_(func)
71
102
  , handler_(handler)
72
103
  , handler_guard_(&handler_)
104
+ , arguments_(arguments)
73
105
  {
106
+ if(arguments == 0) {
107
+ arguments_ = new Arguments();
108
+ } else {
109
+ arguments_ = arguments;
110
+ }
74
111
  }
75
112
 
76
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T, typename Arg15_T>
77
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
78
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11, VALUE ruby_arg12, VALUE ruby_arg13, VALUE ruby_arg14, VALUE ruby_arg15)
113
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T, typename Arg15_T>
114
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
115
+ call(int argc, VALUE* argv, VALUE self)
79
116
  {
80
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> * wrapper = 0;
117
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> * wrapper = 0;
81
118
  try
82
119
  {
83
120
  Data_Object<Wrapped_Function> data(detail::method_data());
84
121
  wrapper =
85
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> *)data.get();
122
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> *)data.get();
123
+ Arguments* args = wrapper->arguments_;
124
+
125
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11, varg12, varg13, varg14, varg15;
126
+
127
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
128
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11, &varg12, &varg13, &varg14, &varg15);
129
+
86
130
  Self_T * obj = from_ruby<Self_T *>(self);
87
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13)); Arg14_T arg14(from_ruby<Arg14_T>(ruby_arg14)); Arg15_T arg15(from_ruby<Arg15_T>(ruby_arg15));
131
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
132
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
133
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
134
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
135
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
136
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
137
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
138
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
139
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
140
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
141
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
142
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
143
+ Arg12_T arg12 = args->getArgumentOrDefault<Arg12_T>(12, varg12);
144
+ Arg13_T arg13 = args->getArgumentOrDefault<Arg13_T>(13, varg13);
145
+ Arg14_T arg14 = args->getArgumentOrDefault<Arg14_T>(14, varg14);
146
+ Arg15_T arg15 = args->getArgumentOrDefault<Arg15_T>(15, varg15);
147
+
88
148
  Func func = wrapper->func_;
89
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
149
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
90
150
  return Qnil;
91
151
  }
92
152
  catch(...)
@@ -107,32 +167,61 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
107
167
  }
108
168
 
109
169
  // ---------------------------------------------------------------------
110
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T>
111
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
170
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T>
171
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
112
172
  Auto_Member_Function_Wrapper(
113
173
  Func func,
114
- Data_Object<Exception_Handler> handler)
174
+ Data_Object<Exception_Handler> handler,
175
+ Arguments* arguments)
115
176
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
116
177
  , func_(func)
117
178
  , handler_(handler)
118
179
  , handler_guard_(&handler_)
180
+ , arguments_(arguments)
119
181
  {
182
+ if(arguments == 0) {
183
+ arguments_ = new Arguments();
184
+ } else {
185
+ arguments_ = arguments;
186
+ }
120
187
  }
121
188
 
122
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T>
123
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
124
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11, VALUE ruby_arg12, VALUE ruby_arg13, VALUE ruby_arg14)
189
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T>
190
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
191
+ call(int argc, VALUE* argv, VALUE self)
125
192
  {
126
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> * wrapper = 0;
193
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> * wrapper = 0;
127
194
  try
128
195
  {
129
196
  Data_Object<Wrapped_Function> data(detail::method_data());
130
197
  wrapper =
131
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> *)data.get();
198
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> *)data.get();
199
+ Arguments* args = wrapper->arguments_;
200
+
201
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11, varg12, varg13, varg14;
202
+
203
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
204
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11, &varg12, &varg13, &varg14);
205
+
132
206
  Self_T * obj = from_ruby<Self_T *>(self);
133
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13)); Arg14_T arg14(from_ruby<Arg14_T>(ruby_arg14));
207
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
208
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
209
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
210
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
211
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
212
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
213
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
214
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
215
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
216
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
217
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
218
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
219
+ Arg12_T arg12 = args->getArgumentOrDefault<Arg12_T>(12, varg12);
220
+ Arg13_T arg13 = args->getArgumentOrDefault<Arg13_T>(13, varg13);
221
+ Arg14_T arg14 = args->getArgumentOrDefault<Arg14_T>(14, varg14);
222
+
134
223
  Func func = wrapper->func_;
135
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14));
224
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14));
136
225
  }
137
226
  catch(...)
138
227
  {
@@ -151,32 +240,61 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
151
240
  }
152
241
  }
153
242
 
154
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T>
155
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
243
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T>
244
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
156
245
  Auto_Member_Function_Wrapper(
157
246
  Func func,
158
- Data_Object<Exception_Handler> handler)
247
+ Data_Object<Exception_Handler> handler,
248
+ Arguments* arguments)
159
249
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
160
250
  , func_(func)
161
251
  , handler_(handler)
162
252
  , handler_guard_(&handler_)
253
+ , arguments_(arguments)
163
254
  {
255
+ if(arguments == 0) {
256
+ arguments_ = new Arguments();
257
+ } else {
258
+ arguments_ = arguments;
259
+ }
164
260
  }
165
261
 
166
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T>
167
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
168
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11, VALUE ruby_arg12, VALUE ruby_arg13, VALUE ruby_arg14)
262
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T>
263
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
264
+ call(int argc, VALUE* argv, VALUE self)
169
265
  {
170
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> * wrapper = 0;
266
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> * wrapper = 0;
171
267
  try
172
268
  {
173
269
  Data_Object<Wrapped_Function> data(detail::method_data());
174
270
  wrapper =
175
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> *)data.get();
271
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> *)data.get();
272
+ Arguments* args = wrapper->arguments_;
273
+
274
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11, varg12, varg13, varg14;
275
+
276
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
277
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11, &varg12, &varg13, &varg14);
278
+
176
279
  Self_T * obj = from_ruby<Self_T *>(self);
177
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13)); Arg14_T arg14(from_ruby<Arg14_T>(ruby_arg14));
280
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
281
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
282
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
283
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
284
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
285
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
286
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
287
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
288
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
289
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
290
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
291
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
292
+ Arg12_T arg12 = args->getArgumentOrDefault<Arg12_T>(12, varg12);
293
+ Arg13_T arg13 = args->getArgumentOrDefault<Arg13_T>(13, varg13);
294
+ Arg14_T arg14 = args->getArgumentOrDefault<Arg14_T>(14, varg14);
295
+
178
296
  Func func = wrapper->func_;
179
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
297
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
180
298
  return Qnil;
181
299
  }
182
300
  catch(...)
@@ -197,32 +315,60 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
197
315
  }
198
316
 
199
317
  // ---------------------------------------------------------------------
200
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
201
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
318
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
319
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
202
320
  Auto_Member_Function_Wrapper(
203
321
  Func func,
204
- Data_Object<Exception_Handler> handler)
322
+ Data_Object<Exception_Handler> handler,
323
+ Arguments* arguments)
205
324
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
206
325
  , func_(func)
207
326
  , handler_(handler)
208
327
  , handler_guard_(&handler_)
328
+ , arguments_(arguments)
209
329
  {
330
+ if(arguments == 0) {
331
+ arguments_ = new Arguments();
332
+ } else {
333
+ arguments_ = arguments;
334
+ }
210
335
  }
211
336
 
212
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
213
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
214
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11, VALUE ruby_arg12, VALUE ruby_arg13)
337
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
338
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
339
+ call(int argc, VALUE* argv, VALUE self)
215
340
  {
216
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> * wrapper = 0;
341
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> * wrapper = 0;
217
342
  try
218
343
  {
219
344
  Data_Object<Wrapped_Function> data(detail::method_data());
220
345
  wrapper =
221
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> *)data.get();
346
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> *)data.get();
347
+ Arguments* args = wrapper->arguments_;
348
+
349
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11, varg12, varg13;
350
+
351
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
352
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11, &varg12, &varg13);
353
+
222
354
  Self_T * obj = from_ruby<Self_T *>(self);
223
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13));
355
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
356
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
357
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
358
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
359
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
360
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
361
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
362
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
363
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
364
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
365
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
366
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
367
+ Arg12_T arg12 = args->getArgumentOrDefault<Arg12_T>(12, varg12);
368
+ Arg13_T arg13 = args->getArgumentOrDefault<Arg13_T>(13, varg13);
369
+
224
370
  Func func = wrapper->func_;
225
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13));
371
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13));
226
372
  }
227
373
  catch(...)
228
374
  {
@@ -241,32 +387,60 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
241
387
  }
242
388
  }
243
389
 
244
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
245
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
390
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
391
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
246
392
  Auto_Member_Function_Wrapper(
247
393
  Func func,
248
- Data_Object<Exception_Handler> handler)
394
+ Data_Object<Exception_Handler> handler,
395
+ Arguments* arguments)
249
396
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
250
397
  , func_(func)
251
398
  , handler_(handler)
252
399
  , handler_guard_(&handler_)
400
+ , arguments_(arguments)
253
401
  {
402
+ if(arguments == 0) {
403
+ arguments_ = new Arguments();
404
+ } else {
405
+ arguments_ = arguments;
406
+ }
254
407
  }
255
408
 
256
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
257
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
258
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11, VALUE ruby_arg12, VALUE ruby_arg13)
409
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
410
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
411
+ call(int argc, VALUE* argv, VALUE self)
259
412
  {
260
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> * wrapper = 0;
413
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> * wrapper = 0;
261
414
  try
262
415
  {
263
416
  Data_Object<Wrapped_Function> data(detail::method_data());
264
417
  wrapper =
265
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> *)data.get();
418
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> *)data.get();
419
+ Arguments* args = wrapper->arguments_;
420
+
421
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11, varg12, varg13;
422
+
423
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
424
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11, &varg12, &varg13);
425
+
266
426
  Self_T * obj = from_ruby<Self_T *>(self);
267
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13));
427
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
428
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
429
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
430
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
431
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
432
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
433
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
434
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
435
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
436
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
437
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
438
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
439
+ Arg12_T arg12 = args->getArgumentOrDefault<Arg12_T>(12, varg12);
440
+ Arg13_T arg13 = args->getArgumentOrDefault<Arg13_T>(13, varg13);
441
+
268
442
  Func func = wrapper->func_;
269
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13);
443
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13);
270
444
  return Qnil;
271
445
  }
272
446
  catch(...)
@@ -287,32 +461,59 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
287
461
  }
288
462
 
289
463
  // ---------------------------------------------------------------------
290
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
291
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
464
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
465
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
292
466
  Auto_Member_Function_Wrapper(
293
467
  Func func,
294
- Data_Object<Exception_Handler> handler)
468
+ Data_Object<Exception_Handler> handler,
469
+ Arguments* arguments)
295
470
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
296
471
  , func_(func)
297
472
  , handler_(handler)
298
473
  , handler_guard_(&handler_)
474
+ , arguments_(arguments)
299
475
  {
476
+ if(arguments == 0) {
477
+ arguments_ = new Arguments();
478
+ } else {
479
+ arguments_ = arguments;
480
+ }
300
481
  }
301
482
 
302
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
303
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
304
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11, VALUE ruby_arg12)
483
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
484
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
485
+ call(int argc, VALUE* argv, VALUE self)
305
486
  {
306
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> * wrapper = 0;
487
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> * wrapper = 0;
307
488
  try
308
489
  {
309
490
  Data_Object<Wrapped_Function> data(detail::method_data());
310
491
  wrapper =
311
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> *)data.get();
492
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> *)data.get();
493
+ Arguments* args = wrapper->arguments_;
494
+
495
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11, varg12;
496
+
497
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
498
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11, &varg12);
499
+
312
500
  Self_T * obj = from_ruby<Self_T *>(self);
313
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12));
501
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
502
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
503
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
504
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
505
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
506
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
507
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
508
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
509
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
510
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
511
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
512
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
513
+ Arg12_T arg12 = args->getArgumentOrDefault<Arg12_T>(12, varg12);
514
+
314
515
  Func func = wrapper->func_;
315
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12));
516
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12));
316
517
  }
317
518
  catch(...)
318
519
  {
@@ -331,32 +532,59 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
331
532
  }
332
533
  }
333
534
 
334
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
335
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
535
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
536
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
336
537
  Auto_Member_Function_Wrapper(
337
538
  Func func,
338
- Data_Object<Exception_Handler> handler)
539
+ Data_Object<Exception_Handler> handler,
540
+ Arguments* arguments)
339
541
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
340
542
  , func_(func)
341
543
  , handler_(handler)
342
544
  , handler_guard_(&handler_)
545
+ , arguments_(arguments)
343
546
  {
547
+ if(arguments == 0) {
548
+ arguments_ = new Arguments();
549
+ } else {
550
+ arguments_ = arguments;
551
+ }
344
552
  }
345
553
 
346
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
347
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
348
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11, VALUE ruby_arg12)
554
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
555
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
556
+ call(int argc, VALUE* argv, VALUE self)
349
557
  {
350
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> * wrapper = 0;
558
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> * wrapper = 0;
351
559
  try
352
560
  {
353
561
  Data_Object<Wrapped_Function> data(detail::method_data());
354
562
  wrapper =
355
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> *)data.get();
563
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> *)data.get();
564
+ Arguments* args = wrapper->arguments_;
565
+
566
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11, varg12;
567
+
568
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
569
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11, &varg12);
570
+
356
571
  Self_T * obj = from_ruby<Self_T *>(self);
357
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12));
572
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
573
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
574
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
575
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
576
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
577
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
578
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
579
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
580
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
581
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
582
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
583
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
584
+ Arg12_T arg12 = args->getArgumentOrDefault<Arg12_T>(12, varg12);
585
+
358
586
  Func func = wrapper->func_;
359
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
587
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
360
588
  return Qnil;
361
589
  }
362
590
  catch(...)
@@ -377,32 +605,58 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
377
605
  }
378
606
 
379
607
  // ---------------------------------------------------------------------
380
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
381
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
608
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
609
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
382
610
  Auto_Member_Function_Wrapper(
383
611
  Func func,
384
- Data_Object<Exception_Handler> handler)
612
+ Data_Object<Exception_Handler> handler,
613
+ Arguments* arguments)
385
614
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
386
615
  , func_(func)
387
616
  , handler_(handler)
388
617
  , handler_guard_(&handler_)
618
+ , arguments_(arguments)
389
619
  {
620
+ if(arguments == 0) {
621
+ arguments_ = new Arguments();
622
+ } else {
623
+ arguments_ = arguments;
624
+ }
390
625
  }
391
626
 
392
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
393
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
394
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11)
627
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
628
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
629
+ call(int argc, VALUE* argv, VALUE self)
395
630
  {
396
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> * wrapper = 0;
631
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> * wrapper = 0;
397
632
  try
398
633
  {
399
634
  Data_Object<Wrapped_Function> data(detail::method_data());
400
635
  wrapper =
401
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> *)data.get();
636
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> *)data.get();
637
+ Arguments* args = wrapper->arguments_;
638
+
639
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11;
640
+
641
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
642
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11);
643
+
402
644
  Self_T * obj = from_ruby<Self_T *>(self);
403
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11));
645
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
646
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
647
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
648
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
649
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
650
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
651
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
652
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
653
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
654
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
655
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
656
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
657
+
404
658
  Func func = wrapper->func_;
405
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11));
659
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11));
406
660
  }
407
661
  catch(...)
408
662
  {
@@ -421,32 +675,58 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
421
675
  }
422
676
  }
423
677
 
424
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
425
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
678
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
679
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
426
680
  Auto_Member_Function_Wrapper(
427
681
  Func func,
428
- Data_Object<Exception_Handler> handler)
682
+ Data_Object<Exception_Handler> handler,
683
+ Arguments* arguments)
429
684
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
430
685
  , func_(func)
431
686
  , handler_(handler)
432
687
  , handler_guard_(&handler_)
688
+ , arguments_(arguments)
433
689
  {
690
+ if(arguments == 0) {
691
+ arguments_ = new Arguments();
692
+ } else {
693
+ arguments_ = arguments;
694
+ }
434
695
  }
435
696
 
436
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
437
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
438
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10, VALUE ruby_arg11)
697
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
698
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
699
+ call(int argc, VALUE* argv, VALUE self)
439
700
  {
440
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> * wrapper = 0;
701
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> * wrapper = 0;
441
702
  try
442
703
  {
443
704
  Data_Object<Wrapped_Function> data(detail::method_data());
444
705
  wrapper =
445
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> *)data.get();
706
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> *)data.get();
707
+ Arguments* args = wrapper->arguments_;
708
+
709
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11;
710
+
711
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
712
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10, &varg11);
713
+
446
714
  Self_T * obj = from_ruby<Self_T *>(self);
447
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11));
715
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
716
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
717
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
718
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
719
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
720
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
721
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
722
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
723
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
724
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
725
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
726
+ Arg11_T arg11 = args->getArgumentOrDefault<Arg11_T>(11, varg11);
727
+
448
728
  Func func = wrapper->func_;
449
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
729
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
450
730
  return Qnil;
451
731
  }
452
732
  catch(...)
@@ -467,32 +747,57 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
467
747
  }
468
748
 
469
749
  // ---------------------------------------------------------------------
470
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
471
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
750
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
751
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
472
752
  Auto_Member_Function_Wrapper(
473
753
  Func func,
474
- Data_Object<Exception_Handler> handler)
754
+ Data_Object<Exception_Handler> handler,
755
+ Arguments* arguments)
475
756
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
476
757
  , func_(func)
477
758
  , handler_(handler)
478
759
  , handler_guard_(&handler_)
760
+ , arguments_(arguments)
479
761
  {
762
+ if(arguments == 0) {
763
+ arguments_ = new Arguments();
764
+ } else {
765
+ arguments_ = arguments;
766
+ }
480
767
  }
481
768
 
482
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
483
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
484
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10)
769
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
770
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
771
+ call(int argc, VALUE* argv, VALUE self)
485
772
  {
486
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> * wrapper = 0;
773
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> * wrapper = 0;
487
774
  try
488
775
  {
489
776
  Data_Object<Wrapped_Function> data(detail::method_data());
490
777
  wrapper =
491
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> *)data.get();
778
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> *)data.get();
779
+ Arguments* args = wrapper->arguments_;
780
+
781
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10;
782
+
783
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
784
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10);
785
+
492
786
  Self_T * obj = from_ruby<Self_T *>(self);
493
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10));
787
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
788
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
789
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
790
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
791
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
792
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
793
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
794
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
795
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
796
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
797
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
798
+
494
799
  Func func = wrapper->func_;
495
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10));
800
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10));
496
801
  }
497
802
  catch(...)
498
803
  {
@@ -511,32 +816,57 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
511
816
  }
512
817
  }
513
818
 
514
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
515
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
819
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
820
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
516
821
  Auto_Member_Function_Wrapper(
517
822
  Func func,
518
- Data_Object<Exception_Handler> handler)
823
+ Data_Object<Exception_Handler> handler,
824
+ Arguments* arguments)
519
825
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
520
826
  , func_(func)
521
827
  , handler_(handler)
522
828
  , handler_guard_(&handler_)
829
+ , arguments_(arguments)
523
830
  {
831
+ if(arguments == 0) {
832
+ arguments_ = new Arguments();
833
+ } else {
834
+ arguments_ = arguments;
835
+ }
524
836
  }
525
837
 
526
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
527
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
528
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9, VALUE ruby_arg10)
838
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
839
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
840
+ call(int argc, VALUE* argv, VALUE self)
529
841
  {
530
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> * wrapper = 0;
842
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> * wrapper = 0;
531
843
  try
532
844
  {
533
845
  Data_Object<Wrapped_Function> data(detail::method_data());
534
846
  wrapper =
535
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> *)data.get();
847
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> *)data.get();
848
+ Arguments* args = wrapper->arguments_;
849
+
850
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10;
851
+
852
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
853
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9, &varg10);
854
+
536
855
  Self_T * obj = from_ruby<Self_T *>(self);
537
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10));
856
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
857
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
858
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
859
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
860
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
861
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
862
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
863
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
864
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
865
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
866
+ Arg10_T arg10 = args->getArgumentOrDefault<Arg10_T>(10, varg10);
867
+
538
868
  Func func = wrapper->func_;
539
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
869
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
540
870
  return Qnil;
541
871
  }
542
872
  catch(...)
@@ -557,32 +887,56 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
557
887
  }
558
888
 
559
889
  // ---------------------------------------------------------------------
560
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
561
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
890
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
891
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
562
892
  Auto_Member_Function_Wrapper(
563
893
  Func func,
564
- Data_Object<Exception_Handler> handler)
894
+ Data_Object<Exception_Handler> handler,
895
+ Arguments* arguments)
565
896
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
566
897
  , func_(func)
567
898
  , handler_(handler)
568
899
  , handler_guard_(&handler_)
900
+ , arguments_(arguments)
569
901
  {
902
+ if(arguments == 0) {
903
+ arguments_ = new Arguments();
904
+ } else {
905
+ arguments_ = arguments;
906
+ }
570
907
  }
571
908
 
572
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
573
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
574
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9)
909
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
910
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
911
+ call(int argc, VALUE* argv, VALUE self)
575
912
  {
576
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> * wrapper = 0;
913
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> * wrapper = 0;
577
914
  try
578
915
  {
579
916
  Data_Object<Wrapped_Function> data(detail::method_data());
580
917
  wrapper =
581
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> *)data.get();
918
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> *)data.get();
919
+ Arguments* args = wrapper->arguments_;
920
+
921
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9;
922
+
923
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
924
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9);
925
+
582
926
  Self_T * obj = from_ruby<Self_T *>(self);
583
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9));
927
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
928
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
929
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
930
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
931
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
932
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
933
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
934
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
935
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
936
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
937
+
584
938
  Func func = wrapper->func_;
585
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9));
939
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9));
586
940
  }
587
941
  catch(...)
588
942
  {
@@ -601,32 +955,56 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
601
955
  }
602
956
  }
603
957
 
604
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
605
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
958
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
959
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
606
960
  Auto_Member_Function_Wrapper(
607
961
  Func func,
608
- Data_Object<Exception_Handler> handler)
962
+ Data_Object<Exception_Handler> handler,
963
+ Arguments* arguments)
609
964
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
610
965
  , func_(func)
611
966
  , handler_(handler)
612
967
  , handler_guard_(&handler_)
968
+ , arguments_(arguments)
613
969
  {
970
+ if(arguments == 0) {
971
+ arguments_ = new Arguments();
972
+ } else {
973
+ arguments_ = arguments;
974
+ }
614
975
  }
615
976
 
616
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
617
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
618
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8, VALUE ruby_arg9)
977
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
978
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
979
+ call(int argc, VALUE* argv, VALUE self)
619
980
  {
620
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> * wrapper = 0;
981
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> * wrapper = 0;
621
982
  try
622
983
  {
623
984
  Data_Object<Wrapped_Function> data(detail::method_data());
624
985
  wrapper =
625
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> *)data.get();
986
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> *)data.get();
987
+ Arguments* args = wrapper->arguments_;
988
+
989
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9;
990
+
991
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
992
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8, &varg9);
993
+
626
994
  Self_T * obj = from_ruby<Self_T *>(self);
627
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9));
995
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
996
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
997
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
998
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
999
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1000
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
1001
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
1002
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
1003
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
1004
+ Arg9_T arg9 = args->getArgumentOrDefault<Arg9_T>(9, varg9);
1005
+
628
1006
  Func func = wrapper->func_;
629
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
1007
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
630
1008
  return Qnil;
631
1009
  }
632
1010
  catch(...)
@@ -647,32 +1025,55 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
647
1025
  }
648
1026
 
649
1027
  // ---------------------------------------------------------------------
650
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
651
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
1028
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
1029
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
652
1030
  Auto_Member_Function_Wrapper(
653
1031
  Func func,
654
- Data_Object<Exception_Handler> handler)
1032
+ Data_Object<Exception_Handler> handler,
1033
+ Arguments* arguments)
655
1034
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
656
1035
  , func_(func)
657
1036
  , handler_(handler)
658
1037
  , handler_guard_(&handler_)
1038
+ , arguments_(arguments)
659
1039
  {
1040
+ if(arguments == 0) {
1041
+ arguments_ = new Arguments();
1042
+ } else {
1043
+ arguments_ = arguments;
1044
+ }
660
1045
  }
661
1046
 
662
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
663
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
664
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8)
1047
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
1048
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
1049
+ call(int argc, VALUE* argv, VALUE self)
665
1050
  {
666
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> * wrapper = 0;
1051
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> * wrapper = 0;
667
1052
  try
668
1053
  {
669
1054
  Data_Object<Wrapped_Function> data(detail::method_data());
670
1055
  wrapper =
671
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> *)data.get();
1056
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> *)data.get();
1057
+ Arguments* args = wrapper->arguments_;
1058
+
1059
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8;
1060
+
1061
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1062
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8);
1063
+
672
1064
  Self_T * obj = from_ruby<Self_T *>(self);
673
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8));
1065
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1066
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1067
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1068
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1069
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1070
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
1071
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
1072
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
1073
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
1074
+
674
1075
  Func func = wrapper->func_;
675
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8));
1076
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8));
676
1077
  }
677
1078
  catch(...)
678
1079
  {
@@ -691,32 +1092,55 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
691
1092
  }
692
1093
  }
693
1094
 
694
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
695
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
1095
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
1096
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
696
1097
  Auto_Member_Function_Wrapper(
697
1098
  Func func,
698
- Data_Object<Exception_Handler> handler)
1099
+ Data_Object<Exception_Handler> handler,
1100
+ Arguments* arguments)
699
1101
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
700
1102
  , func_(func)
701
1103
  , handler_(handler)
702
1104
  , handler_guard_(&handler_)
1105
+ , arguments_(arguments)
703
1106
  {
1107
+ if(arguments == 0) {
1108
+ arguments_ = new Arguments();
1109
+ } else {
1110
+ arguments_ = arguments;
1111
+ }
704
1112
  }
705
1113
 
706
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
707
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
708
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7, VALUE ruby_arg8)
1114
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
1115
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
1116
+ call(int argc, VALUE* argv, VALUE self)
709
1117
  {
710
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> * wrapper = 0;
1118
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> * wrapper = 0;
711
1119
  try
712
1120
  {
713
1121
  Data_Object<Wrapped_Function> data(detail::method_data());
714
1122
  wrapper =
715
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> *)data.get();
1123
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> *)data.get();
1124
+ Arguments* args = wrapper->arguments_;
1125
+
1126
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8;
1127
+
1128
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1129
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7, &varg8);
1130
+
716
1131
  Self_T * obj = from_ruby<Self_T *>(self);
717
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8));
1132
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1133
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1134
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1135
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1136
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1137
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
1138
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
1139
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
1140
+ Arg8_T arg8 = args->getArgumentOrDefault<Arg8_T>(8, varg8);
1141
+
718
1142
  Func func = wrapper->func_;
719
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
1143
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
720
1144
  return Qnil;
721
1145
  }
722
1146
  catch(...)
@@ -737,32 +1161,54 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
737
1161
  }
738
1162
 
739
1163
  // ---------------------------------------------------------------------
740
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
741
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
1164
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
1165
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
742
1166
  Auto_Member_Function_Wrapper(
743
1167
  Func func,
744
- Data_Object<Exception_Handler> handler)
1168
+ Data_Object<Exception_Handler> handler,
1169
+ Arguments* arguments)
745
1170
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
746
1171
  , func_(func)
747
1172
  , handler_(handler)
748
1173
  , handler_guard_(&handler_)
1174
+ , arguments_(arguments)
749
1175
  {
1176
+ if(arguments == 0) {
1177
+ arguments_ = new Arguments();
1178
+ } else {
1179
+ arguments_ = arguments;
1180
+ }
750
1181
  }
751
1182
 
752
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
753
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
754
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7)
1183
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
1184
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
1185
+ call(int argc, VALUE* argv, VALUE self)
755
1186
  {
756
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> * wrapper = 0;
1187
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> * wrapper = 0;
757
1188
  try
758
1189
  {
759
1190
  Data_Object<Wrapped_Function> data(detail::method_data());
760
1191
  wrapper =
761
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> *)data.get();
1192
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> *)data.get();
1193
+ Arguments* args = wrapper->arguments_;
1194
+
1195
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7;
1196
+
1197
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1198
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7);
1199
+
762
1200
  Self_T * obj = from_ruby<Self_T *>(self);
763
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7));
1201
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1202
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1203
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1204
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1205
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1206
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
1207
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
1208
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
1209
+
764
1210
  Func func = wrapper->func_;
765
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7));
1211
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7));
766
1212
  }
767
1213
  catch(...)
768
1214
  {
@@ -781,32 +1227,54 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
781
1227
  }
782
1228
  }
783
1229
 
784
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
785
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
1230
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
1231
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
786
1232
  Auto_Member_Function_Wrapper(
787
1233
  Func func,
788
- Data_Object<Exception_Handler> handler)
1234
+ Data_Object<Exception_Handler> handler,
1235
+ Arguments* arguments)
789
1236
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
790
1237
  , func_(func)
791
1238
  , handler_(handler)
792
1239
  , handler_guard_(&handler_)
1240
+ , arguments_(arguments)
793
1241
  {
1242
+ if(arguments == 0) {
1243
+ arguments_ = new Arguments();
1244
+ } else {
1245
+ arguments_ = arguments;
1246
+ }
794
1247
  }
795
1248
 
796
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
797
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
798
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6, VALUE ruby_arg7)
1249
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
1250
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
1251
+ call(int argc, VALUE* argv, VALUE self)
799
1252
  {
800
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> * wrapper = 0;
1253
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> * wrapper = 0;
801
1254
  try
802
1255
  {
803
1256
  Data_Object<Wrapped_Function> data(detail::method_data());
804
1257
  wrapper =
805
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> *)data.get();
1258
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> *)data.get();
1259
+ Arguments* args = wrapper->arguments_;
1260
+
1261
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6, varg7;
1262
+
1263
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1264
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6, &varg7);
1265
+
806
1266
  Self_T * obj = from_ruby<Self_T *>(self);
807
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7));
1267
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1268
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1269
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1270
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1271
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1272
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
1273
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
1274
+ Arg7_T arg7 = args->getArgumentOrDefault<Arg7_T>(7, varg7);
1275
+
808
1276
  Func func = wrapper->func_;
809
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
1277
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
810
1278
  return Qnil;
811
1279
  }
812
1280
  catch(...)
@@ -827,32 +1295,53 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
827
1295
  }
828
1296
 
829
1297
  // ---------------------------------------------------------------------
830
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
831
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
1298
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
1299
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
832
1300
  Auto_Member_Function_Wrapper(
833
1301
  Func func,
834
- Data_Object<Exception_Handler> handler)
1302
+ Data_Object<Exception_Handler> handler,
1303
+ Arguments* arguments)
835
1304
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
836
1305
  , func_(func)
837
1306
  , handler_(handler)
838
1307
  , handler_guard_(&handler_)
1308
+ , arguments_(arguments)
839
1309
  {
1310
+ if(arguments == 0) {
1311
+ arguments_ = new Arguments();
1312
+ } else {
1313
+ arguments_ = arguments;
1314
+ }
840
1315
  }
841
1316
 
842
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
843
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
844
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6)
1317
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
1318
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
1319
+ call(int argc, VALUE* argv, VALUE self)
845
1320
  {
846
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> * wrapper = 0;
1321
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> * wrapper = 0;
847
1322
  try
848
1323
  {
849
1324
  Data_Object<Wrapped_Function> data(detail::method_data());
850
1325
  wrapper =
851
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> *)data.get();
1326
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> *)data.get();
1327
+ Arguments* args = wrapper->arguments_;
1328
+
1329
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6;
1330
+
1331
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1332
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6);
1333
+
852
1334
  Self_T * obj = from_ruby<Self_T *>(self);
853
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6));
1335
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1336
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1337
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1338
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1339
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1340
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
1341
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
1342
+
854
1343
  Func func = wrapper->func_;
855
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6));
1344
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6));
856
1345
  }
857
1346
  catch(...)
858
1347
  {
@@ -871,32 +1360,53 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
871
1360
  }
872
1361
  }
873
1362
 
874
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
875
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
1363
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
1364
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
876
1365
  Auto_Member_Function_Wrapper(
877
1366
  Func func,
878
- Data_Object<Exception_Handler> handler)
1367
+ Data_Object<Exception_Handler> handler,
1368
+ Arguments* arguments)
879
1369
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
880
1370
  , func_(func)
881
1371
  , handler_(handler)
882
1372
  , handler_guard_(&handler_)
1373
+ , arguments_(arguments)
883
1374
  {
1375
+ if(arguments == 0) {
1376
+ arguments_ = new Arguments();
1377
+ } else {
1378
+ arguments_ = arguments;
1379
+ }
884
1380
  }
885
1381
 
886
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
887
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
888
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5, VALUE ruby_arg6)
1382
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
1383
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
1384
+ call(int argc, VALUE* argv, VALUE self)
889
1385
  {
890
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> * wrapper = 0;
1386
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> * wrapper = 0;
891
1387
  try
892
1388
  {
893
1389
  Data_Object<Wrapped_Function> data(detail::method_data());
894
1390
  wrapper =
895
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> *)data.get();
1391
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> *)data.get();
1392
+ Arguments* args = wrapper->arguments_;
1393
+
1394
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5, varg6;
1395
+
1396
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1397
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5, &varg6);
1398
+
896
1399
  Self_T * obj = from_ruby<Self_T *>(self);
897
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6));
1400
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1401
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1402
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1403
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1404
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1405
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
1406
+ Arg6_T arg6 = args->getArgumentOrDefault<Arg6_T>(6, varg6);
1407
+
898
1408
  Func func = wrapper->func_;
899
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5, arg6);
1409
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
900
1410
  return Qnil;
901
1411
  }
902
1412
  catch(...)
@@ -917,32 +1427,52 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
917
1427
  }
918
1428
 
919
1429
  // ---------------------------------------------------------------------
920
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
921
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
1430
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
1431
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
922
1432
  Auto_Member_Function_Wrapper(
923
1433
  Func func,
924
- Data_Object<Exception_Handler> handler)
1434
+ Data_Object<Exception_Handler> handler,
1435
+ Arguments* arguments)
925
1436
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
926
1437
  , func_(func)
927
1438
  , handler_(handler)
928
1439
  , handler_guard_(&handler_)
1440
+ , arguments_(arguments)
929
1441
  {
1442
+ if(arguments == 0) {
1443
+ arguments_ = new Arguments();
1444
+ } else {
1445
+ arguments_ = arguments;
1446
+ }
930
1447
  }
931
1448
 
932
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
933
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
934
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5)
1449
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
1450
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
1451
+ call(int argc, VALUE* argv, VALUE self)
935
1452
  {
936
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> * wrapper = 0;
1453
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> * wrapper = 0;
937
1454
  try
938
1455
  {
939
1456
  Data_Object<Wrapped_Function> data(detail::method_data());
940
1457
  wrapper =
941
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> *)data.get();
1458
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> *)data.get();
1459
+ Arguments* args = wrapper->arguments_;
1460
+
1461
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5;
1462
+
1463
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1464
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5);
1465
+
942
1466
  Self_T * obj = from_ruby<Self_T *>(self);
943
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5));
1467
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1468
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1469
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1470
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1471
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1472
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
1473
+
944
1474
  Func func = wrapper->func_;
945
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4, arg5));
1475
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5));
946
1476
  }
947
1477
  catch(...)
948
1478
  {
@@ -961,32 +1491,52 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
961
1491
  }
962
1492
  }
963
1493
 
964
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
965
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
1494
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
1495
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
966
1496
  Auto_Member_Function_Wrapper(
967
1497
  Func func,
968
- Data_Object<Exception_Handler> handler)
1498
+ Data_Object<Exception_Handler> handler,
1499
+ Arguments* arguments)
969
1500
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
970
1501
  , func_(func)
971
1502
  , handler_(handler)
972
1503
  , handler_guard_(&handler_)
1504
+ , arguments_(arguments)
973
1505
  {
1506
+ if(arguments == 0) {
1507
+ arguments_ = new Arguments();
1508
+ } else {
1509
+ arguments_ = arguments;
1510
+ }
974
1511
  }
975
1512
 
976
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
977
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
978
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4, VALUE ruby_arg5)
1513
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
1514
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
1515
+ call(int argc, VALUE* argv, VALUE self)
979
1516
  {
980
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> * wrapper = 0;
1517
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> * wrapper = 0;
981
1518
  try
982
1519
  {
983
1520
  Data_Object<Wrapped_Function> data(detail::method_data());
984
1521
  wrapper =
985
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> *)data.get();
1522
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> *)data.get();
1523
+ Arguments* args = wrapper->arguments_;
1524
+
1525
+ VALUE varg0, varg1, varg2, varg3, varg4, varg5;
1526
+
1527
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1528
+ &varg0, &varg1, &varg2, &varg3, &varg4, &varg5);
1529
+
986
1530
  Self_T * obj = from_ruby<Self_T *>(self);
987
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5));
1531
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1532
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1533
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1534
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1535
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1536
+ Arg5_T arg5 = args->getArgumentOrDefault<Arg5_T>(5, varg5);
1537
+
988
1538
  Func func = wrapper->func_;
989
- (*obj.*func)(arg1, arg2, arg3, arg4, arg5);
1539
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4, arg5);
990
1540
  return Qnil;
991
1541
  }
992
1542
  catch(...)
@@ -1007,32 +1557,51 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
1007
1557
  }
1008
1558
 
1009
1559
  // ---------------------------------------------------------------------
1010
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
1011
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
1560
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
1561
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
1012
1562
  Auto_Member_Function_Wrapper(
1013
1563
  Func func,
1014
- Data_Object<Exception_Handler> handler)
1564
+ Data_Object<Exception_Handler> handler,
1565
+ Arguments* arguments)
1015
1566
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1016
1567
  , func_(func)
1017
1568
  , handler_(handler)
1018
1569
  , handler_guard_(&handler_)
1570
+ , arguments_(arguments)
1019
1571
  {
1572
+ if(arguments == 0) {
1573
+ arguments_ = new Arguments();
1574
+ } else {
1575
+ arguments_ = arguments;
1576
+ }
1020
1577
  }
1021
1578
 
1022
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
1023
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
1024
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4)
1579
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
1580
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
1581
+ call(int argc, VALUE* argv, VALUE self)
1025
1582
  {
1026
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> * wrapper = 0;
1583
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> * wrapper = 0;
1027
1584
  try
1028
1585
  {
1029
1586
  Data_Object<Wrapped_Function> data(detail::method_data());
1030
1587
  wrapper =
1031
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> *)data.get();
1588
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> *)data.get();
1589
+ Arguments* args = wrapper->arguments_;
1590
+
1591
+ VALUE varg0, varg1, varg2, varg3, varg4;
1592
+
1593
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1594
+ &varg0, &varg1, &varg2, &varg3, &varg4);
1595
+
1032
1596
  Self_T * obj = from_ruby<Self_T *>(self);
1033
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4));
1597
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1598
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1599
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1600
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1601
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1602
+
1034
1603
  Func func = wrapper->func_;
1035
- return to_ruby((*obj.*func)(arg1, arg2, arg3, arg4));
1604
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3, arg4));
1036
1605
  }
1037
1606
  catch(...)
1038
1607
  {
@@ -1051,32 +1620,51 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
1051
1620
  }
1052
1621
  }
1053
1622
 
1054
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
1055
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
1623
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
1624
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
1056
1625
  Auto_Member_Function_Wrapper(
1057
1626
  Func func,
1058
- Data_Object<Exception_Handler> handler)
1627
+ Data_Object<Exception_Handler> handler,
1628
+ Arguments* arguments)
1059
1629
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1060
1630
  , func_(func)
1061
1631
  , handler_(handler)
1062
1632
  , handler_guard_(&handler_)
1633
+ , arguments_(arguments)
1063
1634
  {
1635
+ if(arguments == 0) {
1636
+ arguments_ = new Arguments();
1637
+ } else {
1638
+ arguments_ = arguments;
1639
+ }
1064
1640
  }
1065
1641
 
1066
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
1067
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
1068
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_arg4)
1642
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
1643
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
1644
+ call(int argc, VALUE* argv, VALUE self)
1069
1645
  {
1070
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> * wrapper = 0;
1646
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> * wrapper = 0;
1071
1647
  try
1072
1648
  {
1073
1649
  Data_Object<Wrapped_Function> data(detail::method_data());
1074
1650
  wrapper =
1075
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> *)data.get();
1651
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> *)data.get();
1652
+ Arguments* args = wrapper->arguments_;
1653
+
1654
+ VALUE varg0, varg1, varg2, varg3, varg4;
1655
+
1656
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1657
+ &varg0, &varg1, &varg2, &varg3, &varg4);
1658
+
1076
1659
  Self_T * obj = from_ruby<Self_T *>(self);
1077
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4));
1660
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1661
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1662
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1663
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1664
+ Arg4_T arg4 = args->getArgumentOrDefault<Arg4_T>(4, varg4);
1665
+
1078
1666
  Func func = wrapper->func_;
1079
- (*obj.*func)(arg1, arg2, arg3, arg4);
1667
+ (*obj.*func)(arg0, arg1, arg2, arg3, arg4);
1080
1668
  return Qnil;
1081
1669
  }
1082
1670
  catch(...)
@@ -1097,32 +1685,50 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
1097
1685
  }
1098
1686
 
1099
1687
  // ---------------------------------------------------------------------
1100
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
1101
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T>::
1688
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
1689
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T>::
1102
1690
  Auto_Member_Function_Wrapper(
1103
1691
  Func func,
1104
- Data_Object<Exception_Handler> handler)
1692
+ Data_Object<Exception_Handler> handler,
1693
+ Arguments* arguments)
1105
1694
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1106
1695
  , func_(func)
1107
1696
  , handler_(handler)
1108
1697
  , handler_guard_(&handler_)
1698
+ , arguments_(arguments)
1109
1699
  {
1700
+ if(arguments == 0) {
1701
+ arguments_ = new Arguments();
1702
+ } else {
1703
+ arguments_ = arguments;
1704
+ }
1110
1705
  }
1111
1706
 
1112
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
1113
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T>::
1114
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3)
1707
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
1708
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T>::
1709
+ call(int argc, VALUE* argv, VALUE self)
1115
1710
  {
1116
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T> * wrapper = 0;
1711
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T> * wrapper = 0;
1117
1712
  try
1118
1713
  {
1119
1714
  Data_Object<Wrapped_Function> data(detail::method_data());
1120
1715
  wrapper =
1121
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T> *)data.get();
1716
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T> *)data.get();
1717
+ Arguments* args = wrapper->arguments_;
1718
+
1719
+ VALUE varg0, varg1, varg2, varg3;
1720
+
1721
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1722
+ &varg0, &varg1, &varg2, &varg3);
1723
+
1122
1724
  Self_T * obj = from_ruby<Self_T *>(self);
1123
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3));
1725
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1726
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1727
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1728
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1729
+
1124
1730
  Func func = wrapper->func_;
1125
- return to_ruby((*obj.*func)(arg1, arg2, arg3));
1731
+ return to_ruby((*obj.*func)(arg0, arg1, arg2, arg3));
1126
1732
  }
1127
1733
  catch(...)
1128
1734
  {
@@ -1141,32 +1747,50 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3)
1141
1747
  }
1142
1748
  }
1143
1749
 
1144
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
1145
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T>::
1750
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
1751
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T>::
1146
1752
  Auto_Member_Function_Wrapper(
1147
1753
  Func func,
1148
- Data_Object<Exception_Handler> handler)
1754
+ Data_Object<Exception_Handler> handler,
1755
+ Arguments* arguments)
1149
1756
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1150
1757
  , func_(func)
1151
1758
  , handler_(handler)
1152
1759
  , handler_guard_(&handler_)
1760
+ , arguments_(arguments)
1153
1761
  {
1762
+ if(arguments == 0) {
1763
+ arguments_ = new Arguments();
1764
+ } else {
1765
+ arguments_ = arguments;
1766
+ }
1154
1767
  }
1155
1768
 
1156
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
1157
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T>::
1158
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3)
1769
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
1770
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T>::
1771
+ call(int argc, VALUE* argv, VALUE self)
1159
1772
  {
1160
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T> * wrapper = 0;
1773
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T> * wrapper = 0;
1161
1774
  try
1162
1775
  {
1163
1776
  Data_Object<Wrapped_Function> data(detail::method_data());
1164
1777
  wrapper =
1165
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T> *)data.get();
1778
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T, Arg3_T> *)data.get();
1779
+ Arguments* args = wrapper->arguments_;
1780
+
1781
+ VALUE varg0, varg1, varg2, varg3;
1782
+
1783
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1784
+ &varg0, &varg1, &varg2, &varg3);
1785
+
1166
1786
  Self_T * obj = from_ruby<Self_T *>(self);
1167
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3));
1787
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1788
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1789
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1790
+ Arg3_T arg3 = args->getArgumentOrDefault<Arg3_T>(3, varg3);
1791
+
1168
1792
  Func func = wrapper->func_;
1169
- (*obj.*func)(arg1, arg2, arg3);
1793
+ (*obj.*func)(arg0, arg1, arg2, arg3);
1170
1794
  return Qnil;
1171
1795
  }
1172
1796
  catch(...)
@@ -1187,32 +1811,49 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3)
1187
1811
  }
1188
1812
 
1189
1813
  // ---------------------------------------------------------------------
1190
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T>
1191
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T>::
1814
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T>
1815
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T>::
1192
1816
  Auto_Member_Function_Wrapper(
1193
1817
  Func func,
1194
- Data_Object<Exception_Handler> handler)
1818
+ Data_Object<Exception_Handler> handler,
1819
+ Arguments* arguments)
1195
1820
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1196
1821
  , func_(func)
1197
1822
  , handler_(handler)
1198
1823
  , handler_guard_(&handler_)
1824
+ , arguments_(arguments)
1199
1825
  {
1826
+ if(arguments == 0) {
1827
+ arguments_ = new Arguments();
1828
+ } else {
1829
+ arguments_ = arguments;
1830
+ }
1200
1831
  }
1201
1832
 
1202
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, typename Arg2_T>
1203
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T>::
1204
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2)
1833
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T>
1834
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T>::
1835
+ call(int argc, VALUE* argv, VALUE self)
1205
1836
  {
1206
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T> * wrapper = 0;
1837
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T> * wrapper = 0;
1207
1838
  try
1208
1839
  {
1209
1840
  Data_Object<Wrapped_Function> data(detail::method_data());
1210
1841
  wrapper =
1211
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T> *)data.get();
1842
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T, Arg2_T> *)data.get();
1843
+ Arguments* args = wrapper->arguments_;
1844
+
1845
+ VALUE varg0, varg1, varg2;
1846
+
1847
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1848
+ &varg0, &varg1, &varg2);
1849
+
1212
1850
  Self_T * obj = from_ruby<Self_T *>(self);
1213
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2));
1851
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1852
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1853
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1854
+
1214
1855
  Func func = wrapper->func_;
1215
- return to_ruby((*obj.*func)(arg1, arg2));
1856
+ return to_ruby((*obj.*func)(arg0, arg1, arg2));
1216
1857
  }
1217
1858
  catch(...)
1218
1859
  {
@@ -1231,32 +1872,49 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2)
1231
1872
  }
1232
1873
  }
1233
1874
 
1234
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T>
1235
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T>::
1875
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T>
1876
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T>::
1236
1877
  Auto_Member_Function_Wrapper(
1237
1878
  Func func,
1238
- Data_Object<Exception_Handler> handler)
1879
+ Data_Object<Exception_Handler> handler,
1880
+ Arguments* arguments)
1239
1881
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1240
1882
  , func_(func)
1241
1883
  , handler_(handler)
1242
1884
  , handler_guard_(&handler_)
1885
+ , arguments_(arguments)
1243
1886
  {
1887
+ if(arguments == 0) {
1888
+ arguments_ = new Arguments();
1889
+ } else {
1890
+ arguments_ = arguments;
1891
+ }
1244
1892
  }
1245
1893
 
1246
- template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T>
1247
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T>::
1248
- call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2)
1894
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T, typename Arg2_T>
1895
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T>::
1896
+ call(int argc, VALUE* argv, VALUE self)
1249
1897
  {
1250
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T> * wrapper = 0;
1898
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T> * wrapper = 0;
1251
1899
  try
1252
1900
  {
1253
1901
  Data_Object<Wrapped_Function> data(detail::method_data());
1254
1902
  wrapper =
1255
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T> *)data.get();
1903
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T, Arg2_T> *)data.get();
1904
+ Arguments* args = wrapper->arguments_;
1905
+
1906
+ VALUE varg0, varg1, varg2;
1907
+
1908
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1909
+ &varg0, &varg1, &varg2);
1910
+
1256
1911
  Self_T * obj = from_ruby<Self_T *>(self);
1257
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2));
1912
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1913
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1914
+ Arg2_T arg2 = args->getArgumentOrDefault<Arg2_T>(2, varg2);
1915
+
1258
1916
  Func func = wrapper->func_;
1259
- (*obj.*func)(arg1, arg2);
1917
+ (*obj.*func)(arg0, arg1, arg2);
1260
1918
  return Qnil;
1261
1919
  }
1262
1920
  catch(...)
@@ -1277,32 +1935,48 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2)
1277
1935
  }
1278
1936
 
1279
1937
  // ---------------------------------------------------------------------
1280
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T>
1281
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T>::
1938
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T>
1939
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T>::
1282
1940
  Auto_Member_Function_Wrapper(
1283
1941
  Func func,
1284
- Data_Object<Exception_Handler> handler)
1942
+ Data_Object<Exception_Handler> handler,
1943
+ Arguments* arguments)
1285
1944
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1286
1945
  , func_(func)
1287
1946
  , handler_(handler)
1288
1947
  , handler_guard_(&handler_)
1948
+ , arguments_(arguments)
1289
1949
  {
1950
+ if(arguments == 0) {
1951
+ arguments_ = new Arguments();
1952
+ } else {
1953
+ arguments_ = arguments;
1954
+ }
1290
1955
  }
1291
1956
 
1292
- template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T>
1293
- VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T>::
1294
- call(VALUE self, VALUE ruby_arg1)
1957
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T, typename Arg1_T>
1958
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T>::
1959
+ call(int argc, VALUE* argv, VALUE self)
1295
1960
  {
1296
- Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T> * wrapper = 0;
1961
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T> * wrapper = 0;
1297
1962
  try
1298
1963
  {
1299
1964
  Data_Object<Wrapped_Function> data(detail::method_data());
1300
1965
  wrapper =
1301
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T> *)data.get();
1966
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T, Arg1_T> *)data.get();
1967
+ Arguments* args = wrapper->arguments_;
1968
+
1969
+ VALUE varg0, varg1;
1970
+
1971
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
1972
+ &varg0, &varg1);
1973
+
1302
1974
  Self_T * obj = from_ruby<Self_T *>(self);
1303
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1));
1975
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
1976
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
1977
+
1304
1978
  Func func = wrapper->func_;
1305
- return to_ruby((*obj.*func)(arg1));
1979
+ return to_ruby((*obj.*func)(arg0, arg1));
1306
1980
  }
1307
1981
  catch(...)
1308
1982
  {
@@ -1321,32 +1995,168 @@ call(VALUE self, VALUE ruby_arg1)
1321
1995
  }
1322
1996
  }
1323
1997
 
1324
- template<typename Func_T, typename Self_T, typename Arg1_T>
1325
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T>::
1998
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T>
1999
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T>::
1326
2000
  Auto_Member_Function_Wrapper(
1327
2001
  Func func,
1328
- Data_Object<Exception_Handler> handler)
2002
+ Data_Object<Exception_Handler> handler,
2003
+ Arguments* arguments)
1329
2004
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1330
2005
  , func_(func)
1331
2006
  , handler_(handler)
1332
2007
  , handler_guard_(&handler_)
2008
+ , arguments_(arguments)
1333
2009
  {
2010
+ if(arguments == 0) {
2011
+ arguments_ = new Arguments();
2012
+ } else {
2013
+ arguments_ = arguments;
2014
+ }
1334
2015
  }
1335
2016
 
1336
- template<typename Func_T, typename Self_T, typename Arg1_T>
1337
- VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T>::
1338
- call(VALUE self, VALUE ruby_arg1)
2017
+ template<typename Func_T, typename Self_T, typename Arg0_T, typename Arg1_T>
2018
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T>::
2019
+ call(int argc, VALUE* argv, VALUE self)
1339
2020
  {
1340
- Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T> * wrapper = 0;
2021
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T> * wrapper = 0;
1341
2022
  try
1342
2023
  {
1343
2024
  Data_Object<Wrapped_Function> data(detail::method_data());
1344
2025
  wrapper =
1345
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T> *)data.get();
2026
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T, Arg1_T> *)data.get();
2027
+ Arguments* args = wrapper->arguments_;
2028
+
2029
+ VALUE varg0, varg1;
2030
+
2031
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
2032
+ &varg0, &varg1);
2033
+
1346
2034
  Self_T * obj = from_ruby<Self_T *>(self);
1347
- Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1));
2035
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
2036
+ Arg1_T arg1 = args->getArgumentOrDefault<Arg1_T>(1, varg1);
2037
+
1348
2038
  Func func = wrapper->func_;
1349
- (*obj.*func)(arg1);
2039
+ (*obj.*func)(arg0, arg1);
2040
+ return Qnil;
2041
+ }
2042
+ catch(...)
2043
+ {
2044
+ RUBY_TRY
2045
+ {
2046
+ if(wrapper)
2047
+ {
2048
+ return wrapper->handler_->handle_exception();
2049
+ }
2050
+ else
2051
+ {
2052
+ throw;
2053
+ }
2054
+ }
2055
+ RUBY_CATCH
2056
+ }
2057
+ }
2058
+
2059
+ // ---------------------------------------------------------------------
2060
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T>
2061
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T>::
2062
+ Auto_Member_Function_Wrapper(
2063
+ Func func,
2064
+ Data_Object<Exception_Handler> handler,
2065
+ Arguments* arguments)
2066
+ : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
2067
+ , func_(func)
2068
+ , handler_(handler)
2069
+ , handler_guard_(&handler_)
2070
+ , arguments_(arguments)
2071
+ {
2072
+ if(arguments == 0) {
2073
+ arguments_ = new Arguments();
2074
+ } else {
2075
+ arguments_ = arguments;
2076
+ }
2077
+ }
2078
+
2079
+ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg0_T>
2080
+ VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T>::
2081
+ call(int argc, VALUE* argv, VALUE self)
2082
+ {
2083
+ Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T> * wrapper = 0;
2084
+ try
2085
+ {
2086
+ Data_Object<Wrapped_Function> data(detail::method_data());
2087
+ wrapper =
2088
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg0_T> *)data.get();
2089
+ Arguments* args = wrapper->arguments_;
2090
+
2091
+ VALUE varg0;
2092
+
2093
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
2094
+ &varg0);
2095
+
2096
+ Self_T * obj = from_ruby<Self_T *>(self);
2097
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
2098
+
2099
+ Func func = wrapper->func_;
2100
+ return to_ruby((*obj.*func)(arg0));
2101
+ }
2102
+ catch(...)
2103
+ {
2104
+ RUBY_TRY
2105
+ {
2106
+ if(wrapper)
2107
+ {
2108
+ return wrapper->handler_->handle_exception();
2109
+ }
2110
+ else
2111
+ {
2112
+ throw;
2113
+ }
2114
+ }
2115
+ RUBY_CATCH
2116
+ }
2117
+ }
2118
+
2119
+ template<typename Func_T, typename Self_T, typename Arg0_T>
2120
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T>::
2121
+ Auto_Member_Function_Wrapper(
2122
+ Func func,
2123
+ Data_Object<Exception_Handler> handler,
2124
+ Arguments* arguments)
2125
+ : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
2126
+ , func_(func)
2127
+ , handler_(handler)
2128
+ , handler_guard_(&handler_)
2129
+ , arguments_(arguments)
2130
+ {
2131
+ if(arguments == 0) {
2132
+ arguments_ = new Arguments();
2133
+ } else {
2134
+ arguments_ = arguments;
2135
+ }
2136
+ }
2137
+
2138
+ template<typename Func_T, typename Self_T, typename Arg0_T>
2139
+ VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T>::
2140
+ call(int argc, VALUE* argv, VALUE self)
2141
+ {
2142
+ Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T> * wrapper = 0;
2143
+ try
2144
+ {
2145
+ Data_Object<Wrapped_Function> data(detail::method_data());
2146
+ wrapper =
2147
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg0_T> *)data.get();
2148
+ Arguments* args = wrapper->arguments_;
2149
+
2150
+ VALUE varg0;
2151
+
2152
+ rb_scan_args(argc, argv, args->formatString(Num_Args),
2153
+ &varg0);
2154
+
2155
+ Self_T * obj = from_ruby<Self_T *>(self);
2156
+ Arg0_T arg0 = args->getArgumentOrDefault<Arg0_T>(0, varg0);
2157
+
2158
+ Func func = wrapper->func_;
2159
+ (*obj.*func)(arg0);
1350
2160
  return Qnil;
1351
2161
  }
1352
2162
  catch(...)
@@ -1371,17 +2181,24 @@ template<typename Func_T, typename Ret_T, typename Self_T>
1371
2181
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T>::
1372
2182
  Auto_Member_Function_Wrapper(
1373
2183
  Func func,
1374
- Data_Object<Exception_Handler> handler)
2184
+ Data_Object<Exception_Handler> handler,
2185
+ Arguments* arguments)
1375
2186
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1376
2187
  , func_(func)
1377
2188
  , handler_(handler)
1378
2189
  , handler_guard_(&handler_)
2190
+ , arguments_(arguments)
1379
2191
  {
2192
+ if(arguments == 0) {
2193
+ arguments_ = new Arguments();
2194
+ } else {
2195
+ arguments_ = arguments;
2196
+ }
1380
2197
  }
1381
2198
 
1382
2199
  template<typename Func_T, typename Ret_T, typename Self_T>
1383
2200
  VALUE Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T>::
1384
- call(VALUE self)
2201
+ call(int argc, VALUE* argv, VALUE self)
1385
2202
  {
1386
2203
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T> * wrapper = 0;
1387
2204
  try
@@ -1389,8 +2206,10 @@ call(VALUE self)
1389
2206
  Data_Object<Wrapped_Function> data(detail::method_data());
1390
2207
  wrapper =
1391
2208
  (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T> *)data.get();
2209
+
2210
+ rb_scan_args(argc, argv, "0");
1392
2211
  Self_T * obj = from_ruby<Self_T *>(self);
1393
-
2212
+
1394
2213
  Func func = wrapper->func_;
1395
2214
  return to_ruby((*obj.*func)());
1396
2215
  }
@@ -1415,17 +2234,24 @@ template<typename Func_T, typename Self_T>
1415
2234
  Auto_Member_Function_Wrapper<Func_T, void, Self_T>::
1416
2235
  Auto_Member_Function_Wrapper(
1417
2236
  Func func,
1418
- Data_Object<Exception_Handler> handler)
2237
+ Data_Object<Exception_Handler> handler,
2238
+ Arguments* arguments)
1419
2239
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1420
2240
  , func_(func)
1421
2241
  , handler_(handler)
1422
2242
  , handler_guard_(&handler_)
2243
+ , arguments_(arguments)
1423
2244
  {
2245
+ if(arguments == 0) {
2246
+ arguments_ = new Arguments();
2247
+ } else {
2248
+ arguments_ = arguments;
2249
+ }
1424
2250
  }
1425
2251
 
1426
2252
  template<typename Func_T, typename Self_T>
1427
2253
  VALUE Auto_Member_Function_Wrapper<Func_T, void, Self_T>::
1428
- call(VALUE self)
2254
+ call(int argc, VALUE* argv, VALUE self)
1429
2255
  {
1430
2256
  Auto_Member_Function_Wrapper<Func_T, void, Self_T> * wrapper = 0;
1431
2257
  try
@@ -1433,8 +2259,9 @@ call(VALUE self)
1433
2259
  Data_Object<Wrapped_Function> data(detail::method_data());
1434
2260
  wrapper =
1435
2261
  (Auto_Member_Function_Wrapper<Func_T, void, Self_T> *)data.get();
2262
+ rb_scan_args(argc, argv, "0");
1436
2263
  Self_T * obj = from_ruby<Self_T *>(self);
1437
-
2264
+
1438
2265
  Func func = wrapper->func_;
1439
2266
  (*obj.*func)();
1440
2267
  return Qnil;