rice 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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;