wxruby3 1.7.0 → 1.8.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 (220) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +27 -2
  3. data/README.md +15 -15
  4. data/ext/wxruby3/include/wxRubyApp.h +145 -46
  5. data/ext/wxruby3/include/wxruby-ComboPopup.h +25 -8
  6. data/ext/wxruby3/include/wxruby-GCTracking.h +262 -0
  7. data/ext/wxruby3/include/wxruby-MBConv.h +190 -0
  8. data/ext/wxruby3/include/wxruby-SharedEventHandler.h +183 -0
  9. data/ext/wxruby3/include/wxruby-SharedPtr.h +104 -0
  10. data/ext/wxruby3/include/wxruby-runtime.h +29 -0
  11. data/ext/wxruby3/swig/custom/rubytracking.swg +8 -22
  12. data/ext/wxruby3/swig/custom/wx_ruby_shared_ptr.i +434 -0
  13. data/ext/wxruby3/swig/custom/wx_shared_ptr.i +431 -0
  14. data/ext/wxruby3/swig/mark_free_impl.i +7 -132
  15. data/ext/wxruby3/swig/memory_management.i +8 -44
  16. data/ext/wxruby3/swig/wx.i +46 -73
  17. data/lib/wx/core/const.rb +0 -1
  18. data/lib/wx/core/context_help.rb +17 -0
  19. data/lib/wx/core/cursor.rb +1 -0
  20. data/lib/wx/core/helpcontrollerhelpprovider.rb +10 -2
  21. data/lib/wx/core/mbconv.rb +11 -0
  22. data/lib/wx/core/media_ctrl.rb +31 -0
  23. data/lib/wx/core/top_level_window.rb +7 -0
  24. data/lib/wx/core.rb +6 -0
  25. data/lib/wx/doc/art_provider.rb +17 -0
  26. data/lib/wx/doc/context_help.rb +42 -0
  27. data/lib/wx/doc/core.rb +0 -5
  28. data/lib/wx/doc/functions.rb +10 -0
  29. data/lib/wx/doc/gen/affine_matrix2d.rb +2 -0
  30. data/lib/wx/doc/gen/art_provider.rb +12 -0
  31. data/lib/wx/doc/gen/aui/aui_notebook_event.rb +15 -15
  32. data/lib/wx/doc/gen/aui/aui_pane_info.rb +8 -8
  33. data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +5 -5
  34. data/lib/wx/doc/gen/book_ctrl_base.rb +2 -1
  35. data/lib/wx/doc/gen/calendar_event.rb +5 -5
  36. data/lib/wx/doc/gen/choicebook.rb +2 -2
  37. data/lib/wx/doc/gen/collapsible_pane.rb +1 -1
  38. data/lib/wx/doc/gen/colour_dialog.rb +1 -1
  39. data/lib/wx/doc/gen/colour_picker_event.rb +3 -3
  40. data/lib/wx/doc/gen/context_help_button.rb +0 -53
  41. data/lib/wx/doc/gen/core.rb +4 -4
  42. data/lib/wx/doc/gen/credential_entry_dialog.rb +2 -2
  43. data/lib/wx/doc/gen/date_event.rb +2 -2
  44. data/lib/wx/doc/gen/dial_up_event.rb +2 -2
  45. data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +2 -2
  46. data/lib/wx/doc/gen/event.rb +58 -58
  47. data/lib/wx/doc/gen/ext_help_controller.rb +62 -16
  48. data/lib/wx/doc/gen/file_ctrl.rb +4 -4
  49. data/lib/wx/doc/gen/file_dir_picker_event.rb +2 -2
  50. data/lib/wx/doc/gen/file_system.rb +1 -1
  51. data/lib/wx/doc/gen/find_dialog_event.rb +5 -5
  52. data/lib/wx/doc/gen/font_picker_event.rb +1 -1
  53. data/lib/wx/doc/gen/grid/grid_ctrl.rb +67 -32
  54. data/lib/wx/doc/gen/header_ctrl_event.rb +13 -13
  55. data/lib/wx/doc/gen/help_controller.rb +45 -2
  56. data/lib/wx/doc/gen/html/html_help_controller.rb +74 -32
  57. data/lib/wx/doc/gen/html/html_help_window.rb +3 -3
  58. data/lib/wx/doc/gen/html/html_window.rb +4 -4
  59. data/lib/wx/doc/gen/hyperlink_ctrl.rb +1 -1
  60. data/lib/wx/doc/gen/list_ctrl.rb +22 -22
  61. data/lib/wx/doc/gen/listbook.rb +2 -2
  62. data/lib/wx/doc/gen/mb_conv.rb +10 -0
  63. data/lib/wx/doc/gen/media_event.rb +6 -6
  64. data/lib/wx/doc/gen/notebook.rb +2 -2
  65. data/lib/wx/doc/gen/pg/pg_validation_info.rb +14 -14
  66. data/lib/wx/doc/gen/pg/property_grid_interface.rb +2 -2
  67. data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +19 -9
  68. data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +2 -2
  69. data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +3 -3
  70. data/lib/wx/doc/gen/rbn/ribbon_panel.rb +2 -2
  71. data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +2 -2
  72. data/lib/wx/doc/gen/rt/event_list.rb +17 -0
  73. data/lib/wx/doc/gen/rt/shared_evt_handler.rb +14 -0
  74. data/lib/wx/doc/gen/rt/thread_event.rb +71 -0
  75. data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +19 -19
  76. data/lib/wx/doc/gen/sash_event.rb +2 -2
  77. data/lib/wx/doc/gen/sash_layout_window.rb +2 -2
  78. data/lib/wx/doc/gen/search_ctrl.rb +2 -2
  79. data/lib/wx/doc/gen/spin_ctrl.rb +2 -2
  80. data/lib/wx/doc/gen/splitter_window.rb +6 -6
  81. data/lib/wx/doc/gen/stc/styled_text_event.rb +34 -34
  82. data/lib/wx/doc/gen/task_bar_icon_event.rb +10 -10
  83. data/lib/wx/doc/gen/text_ctrl.rb +4 -4
  84. data/lib/wx/doc/gen/toggle_button.rb +1 -1
  85. data/lib/wx/doc/gen/toolbook.rb +2 -2
  86. data/lib/wx/doc/gen/top_level_window.rb +19 -0
  87. data/lib/wx/doc/gen/tree_ctrl.rb +21 -21
  88. data/lib/wx/doc/gen/treebook.rb +4 -4
  89. data/lib/wx/doc/gen/utils.rb +2 -2
  90. data/lib/wx/doc/gen/web/event_list.rb +95 -0
  91. data/lib/wx/doc/gen/web/web_view.rb +1136 -0
  92. data/lib/wx/doc/gen/web/web_view_event.rb +210 -0
  93. data/lib/wx/doc/gen/web/web_view_handler.rb +318 -0
  94. data/lib/wx/doc/gen/window.rb +1 -1
  95. data/lib/wx/doc/gen/wizard_event.rb +7 -7
  96. data/lib/wx/doc/html/html_help_controller.rb +23 -1
  97. data/lib/wx/doc/mbconv.rb +108 -0
  98. data/lib/wx/doc/rt/shared_event_handler.rb +49 -0
  99. data/lib/wx/doc/rt/thread_event.rb +28 -0
  100. data/lib/wx/doc/webview.rb +40 -0
  101. data/lib/wx/helpers.rb +1 -1
  102. data/lib/wx/html/htmlhelpcontroller.rb +10 -0
  103. data/lib/wx/keyword_defs.rb +11 -0
  104. data/lib/wx/rt/events/evt_list.rb +8 -0
  105. data/lib/wx/rt/require.rb +8 -0
  106. data/lib/wx/rt/thread_event.rb +14 -0
  107. data/lib/wx/rt.rb +16 -0
  108. data/lib/wx/version.rb +1 -1
  109. data/lib/wx/web/events/evt_list.rb +74 -0
  110. data/lib/wx/web/require.rb +8 -0
  111. data/lib/wx/web/webview.rb +106 -0
  112. data/lib/wx/web.rb +17 -0
  113. data/lib/wx/wxruby/cmd/setup.rb +15 -0
  114. data/lib/wx.rb +2 -0
  115. data/rakelib/configure.rb +24 -0
  116. data/rakelib/gem.rb +3 -2
  117. data/rakelib/install.rb +54 -27
  118. data/rakelib/lib/config/macosx.rb +7 -5
  119. data/rakelib/lib/config/mingw.rb +66 -5
  120. data/rakelib/lib/config/pkgman/mingw.rb +1 -1
  121. data/rakelib/lib/config/unixish.rb +4 -2
  122. data/rakelib/lib/config.rb +37 -3
  123. data/rakelib/lib/core/include/client_data.inc +38 -17
  124. data/rakelib/lib/core/include/funcall.inc +1 -1
  125. data/rakelib/lib/core/include/swigdirector.inc +3 -3
  126. data/rakelib/lib/core/include/swigrubyrun.inc +14 -26
  127. data/rakelib/lib/core/package.rb +0 -2
  128. data/rakelib/lib/director/app.rb +1 -8
  129. data/rakelib/lib/director/art_provider.rb +7 -3
  130. data/rakelib/lib/director/comboctrl.rb +0 -7
  131. data/rakelib/lib/director/context_help_button.rb +35 -2
  132. data/rakelib/lib/director/event_handler.rb +32 -28
  133. data/rakelib/lib/director/fs_file.rb +15 -10
  134. data/rakelib/lib/director/functions.rb +8 -0
  135. data/rakelib/lib/director/grid_cell_attr.rb +1 -3
  136. data/rakelib/lib/director/grid_cell_editor.rb +14 -12
  137. data/rakelib/lib/director/grid_cell_renderer.rb +11 -8
  138. data/rakelib/lib/director/grid_ctrl.rb +140 -121
  139. data/rakelib/lib/director/help_controller.rb +70 -2
  140. data/rakelib/lib/director/mb_conv.rb +30 -0
  141. data/rakelib/lib/director/menu.rb +92 -42
  142. data/rakelib/lib/director/menu_bar.rb +84 -45
  143. data/rakelib/lib/director/menu_item.rb +2 -2
  144. data/rakelib/lib/director/persistence_manager.rb +3 -2
  145. data/rakelib/lib/director/preview_frame.rb +2 -2
  146. data/rakelib/lib/director/richtext_buffer.rb +5 -2
  147. data/rakelib/lib/director/shared_evt_handler.rb +30 -0
  148. data/rakelib/lib/director/sizer.rb +8 -17
  149. data/rakelib/lib/director/sizer_item.rb +3 -4
  150. data/rakelib/lib/director/task_bar_icon.rb +7 -7
  151. data/rakelib/lib/director/thread_event.rb +33 -0
  152. data/rakelib/lib/director/validator.rb +3 -1
  153. data/rakelib/lib/director/variant.rb +16 -12
  154. data/rakelib/lib/director/webview.rb +166 -0
  155. data/rakelib/lib/director/webview_event.rb +37 -0
  156. data/rakelib/lib/director/webview_handler.rb +63 -0
  157. data/rakelib/lib/generate/doc/thread_event.yaml +20 -0
  158. data/rakelib/lib/generate/doc/web_view.yaml +135 -0
  159. data/rakelib/lib/generate/doc/web_view_event.yaml +38 -0
  160. data/rakelib/lib/generate/doc/web_view_handler.yaml +58 -0
  161. data/rakelib/lib/specs/interfaces.rb +12 -0
  162. data/rakelib/lib/typemap/common.rb +34 -1
  163. data/rakelib/lib/typemap/mb_conv.rb +58 -0
  164. data/rakelib/prepost.rake +23 -31
  165. data/rakelib/prepost.rb +20 -0
  166. data/samples/event/threaded.rb +295 -42
  167. data/samples/event/tn_threaded.png +0 -0
  168. data/samples/help/doc/back.gif +0 -0
  169. data/samples/help/doc/contents.gif +0 -0
  170. data/samples/help/doc/cshelp.txt +9 -0
  171. data/samples/help/doc/doc.chm +0 -0
  172. data/samples/help/doc/doc.cnt +8 -0
  173. data/samples/help/doc/doc.h +7 -0
  174. data/samples/help/doc/doc.hhc +40 -0
  175. data/samples/help/doc/doc.hhk +31 -0
  176. data/samples/help/doc/doc.hhp +33 -0
  177. data/samples/help/doc/doc.hpj +21 -0
  178. data/samples/help/doc/doc.htm +27 -0
  179. data/samples/help/doc/doc1.htm +24 -0
  180. data/samples/help/doc/doc2.htm +12 -0
  181. data/samples/help/doc/doc3.htm +12 -0
  182. data/samples/help/doc/doc4.htm +12 -0
  183. data/samples/help/doc/doc5.htm +14 -0
  184. data/samples/help/doc/forward.gif +0 -0
  185. data/samples/help/doc/up.gif +0 -0
  186. data/samples/help/doc.chm +0 -0
  187. data/samples/help/doc.chw +0 -0
  188. data/samples/help/doc.zip +0 -0
  189. data/samples/help/help.rb +352 -0
  190. data/samples/help/tn_help.png +0 -0
  191. data/samples/webview/handler_advanced.html +55 -0
  192. data/samples/webview/tn_webview.png +0 -0
  193. data/samples/webview/webview.rb +1264 -0
  194. data/tests/assets/handler_advanced.html +55 -0
  195. data/tests/assets/test.css +1 -0
  196. data/tests/assets/test.html +9 -0
  197. data/tests/assets/test.zip +0 -0
  198. data/tests/lib/text_entry_tests.rb +2 -2
  199. data/tests/lib/wxapp_runner.rb +40 -0
  200. data/tests/lib/wxframe_runner.rb +17 -2
  201. data/tests/test_art.rb +8 -8
  202. data/tests/test_clipboard.rb +4 -4
  203. data/tests/test_config.rb +6 -6
  204. data/tests/test_exceptions.rb +8 -6
  205. data/tests/test_ext_controls.rb +3 -3
  206. data/tests/test_file_dialog.rb +5 -5
  207. data/tests/test_font.rb +7 -7
  208. data/tests/test_grid_ctrl.rb +133 -0
  209. data/tests/test_help.rb +88 -0
  210. data/tests/test_intl.rb +1 -1
  211. data/tests/test_media_ctrl.rb +14 -6
  212. data/tests/test_menu.rb +94 -86
  213. data/tests/test_persistence.rb +1 -1
  214. data/tests/test_proof_check.rb +5 -5
  215. data/tests/test_propgrid.rb +1 -1
  216. data/tests/test_shared_event_handler.rb +141 -0
  217. data/tests/test_std_controls.rb +5 -5
  218. data/tests/test_webview.rb +492 -0
  219. data/tests/test_window.rb +3 -3
  220. metadata +78 -2
@@ -0,0 +1,104 @@
1
+ // Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ //
3
+ // This software is released under the MIT license.
4
+
5
+ #ifndef _WXRUBY_SHAREDPTR_H_
6
+ #define _WXRUBY_SHAREDPTR_H_
7
+
8
+ /*
9
+ A shared pointer class to wrap wxSharedPtr for derived classes and allowing implicit
10
+ conversion to wxSharedPtr without loosing reference counting and implicit down casting.
11
+ */
12
+ #include <wx/sharedptr.h>
13
+
14
+ template <class T, class Base = T>
15
+ class WxRubySharedPtr
16
+ {
17
+ public:
18
+ typedef T* ptr_t;
19
+ typedef wxSharedPtr<Base> shared_ptr_t;
20
+
21
+ explicit WxRubySharedPtr( T* ptr = nullptr )
22
+ : shared_ptr_(ptr)
23
+ {
24
+ }
25
+
26
+ WxRubySharedPtr(const WxRubySharedPtr& other)
27
+ : shared_ptr_(other.get_shared())
28
+ {}
29
+
30
+ WxRubySharedPtr(WxRubySharedPtr&& other)
31
+ : shared_ptr_(std::move (other.get_shared()))
32
+ {}
33
+
34
+ #if !defined(SWIG)
35
+ template<typename _Tp1, typename = typename
36
+ std::enable_if<std::is_convertible<typename _Tp1::ptr_t, T*>::value>::type>
37
+ WxRubySharedPtr(const _Tp1& other)
38
+ : shared_ptr_(other.get_shared())
39
+ {}
40
+
41
+ template<typename _Tp1, typename = typename
42
+ std::enable_if<std::is_convertible<typename _Tp1::ptr_t, T*>::value>::type>
43
+ WxRubySharedPtr(_Tp1&& other)
44
+ : shared_ptr_(std::move(other.get_shared()))
45
+ {}
46
+ #endif
47
+
48
+ WxRubySharedPtr& operator=(const WxRubySharedPtr& other)
49
+ {
50
+ this->shared_ptr_ = other.get_shared();
51
+ return *this;
52
+ }
53
+
54
+ WxRubySharedPtr& operator=( T* ptr )
55
+ {
56
+ this->shared_ptr_ = ptr;
57
+ return *this;
58
+ }
59
+
60
+ #if !defined(SWIG)
61
+ template<typename _Tp1, typename = typename
62
+ std::enable_if<std::is_convertible<typename _Tp1::ptr_t, T*>::value>::type>
63
+ WxRubySharedPtr& operator=(const _Tp1& other)
64
+ {
65
+ this->shared_ptr_ = other.get_shared();
66
+ return *this;
67
+ }
68
+ #endif
69
+
70
+ T* operator->()
71
+ {
72
+ return const_cast<T*> (this->_get());
73
+ }
74
+
75
+ const T* operator->() const
76
+ {
77
+ return this->_get();
78
+ }
79
+
80
+ const T* get() const
81
+ {
82
+ return this->_get();
83
+ }
84
+
85
+ void reset( T* ptr = nullptr )
86
+ {
87
+ this->shared_ptr_.reset(ptr);
88
+ }
89
+
90
+ shared_ptr_t get_shared() const { return this->shared_ptr_; }
91
+
92
+ operator shared_ptr_t() const { return this->get_shared(); }
93
+
94
+ private:
95
+
96
+ const T* _get() const
97
+ {
98
+ return dynamic_cast<const T*> (this->shared_ptr_.get());
99
+ }
100
+
101
+ shared_ptr_t shared_ptr_;
102
+ };
103
+
104
+ #endif
@@ -134,6 +134,35 @@ WXRUBY_EXPORT void wxRuby_AppendMarker(WXRBMarkFunction marker);
134
134
  WXRUBY_EXPORT VALUE wxRuby_GetTopLevelWindowClass(); // used for wxWindow typemap in typemap.i
135
135
  WXRUBY_EXPORT bool GC_IsWindowDeleted(void *ptr);
136
136
 
137
+ WXRUBY_EXPORT bool GC_IsObjectOwned(VALUE object);
138
+
139
+ #ifdef __cplusplus
140
+ extern "C" {
141
+ #endif
142
+
143
+ WXRUBY_EXPORT void wxRuby_InitializeTracking();
144
+ WXRUBY_EXPORT void wxRuby_AddTracking(void* ptr, VALUE object);
145
+ WXRUBY_EXPORT VALUE wxRuby_FindTracking(void* ptr);
146
+ WXRUBY_EXPORT void wxRuby_RemoveTracking(void* ptr);
147
+ WXRUBY_EXPORT void wxRuby_UnlinkObject(void* ptr);
148
+
149
+ #ifdef __cplusplus
150
+ }
151
+ #endif
152
+
153
+ #include <unordered_map>
154
+
155
+ typedef std::unordered_map<void*, VALUE> TGCTrackingValueMap;
156
+ typedef void (* TGCMarkerFunction)(const TGCTrackingValueMap&);
157
+
158
+ WXRUBY_EXPORT void wxRuby_RegisterTrackingCategory(std::string category, TGCMarkerFunction marker, bool has_data = false);
159
+ WXRUBY_EXPORT void wxRuby_RegisterCategoryValue(const std::string &category, void *ptr, VALUE object);
160
+ WXRUBY_EXPORT void wxRuby_UnregisterCategoryValue(const std::string &category, void *ptr);
161
+ WXRUBY_EXPORT VALUE wxRuby_FindCategoryValue(const std::string &category, void *ptr);
162
+ WXRUBY_EXPORT void wxRuby_UnlinkCategoryValue(const std::string &category, void* ptr);
163
+
164
+ WXRUBY_EXPORT void wxRuby_MarkTracked();
165
+
137
166
  // Defined in wx.i; getting, setting and using swig_type <-> ruby class
138
167
  // mappings
139
168
  WXRUBY_EXPORT swig_type_info* wxRuby_GetSwigTypeForClass(VALUE cls);
@@ -15,47 +15,33 @@ extern "C" {
15
15
  #endif
16
16
 
17
17
  // Shared custom swig tracking functions
18
+ WXRUBY_EXPORT void wxRuby_InitializeTracking();
18
19
  WXRUBY_EXPORT void wxRuby_AddTracking(void* ptr, VALUE object);
19
20
  WXRUBY_EXPORT VALUE wxRuby_FindTracking(void* ptr);
20
21
  WXRUBY_EXPORT void wxRuby_RemoveTracking(void* ptr);
21
- WXRUBY_EXPORT void wxRuby_IterateTracking( void(*meth)(void* ptr, VALUE obj) );
22
22
 
23
- /* Setup a Ruby hash table to store Trackings - mostly done in wx.i */
24
- SWIGRUNTIMEINLINE void SWIG_RubyInitializeTrackings(void) {
25
- // no-op
26
- }
23
+ /* Setup a Ruby hash table to store Trackings */
24
+ #define SWIG_RubyInitializeTrackings()
27
25
 
28
26
  /* Add a Tracking from a C/C++ struct to a Ruby object */
29
- SWIGRUNTIMEINLINE void SWIG_RubyAddTracking(void* ptr, VALUE object) {
30
- wxRuby_AddTracking(ptr, object);
31
- }
27
+ #define SWIG_RubyAddTracking wxRuby_AddTracking
32
28
 
33
29
  /* Get the Ruby object that owns the specified C/C++ struct */
34
- SWIGRUNTIMEINLINE VALUE SWIG_RubyInstanceFor(void* ptr) {
35
- return wxRuby_FindTracking(ptr);
36
- }
30
+ #define SWIG_RubyInstanceFor wxRuby_FindTracking
37
31
 
38
32
  /* Remove a Tracking from a C/C++ struct to a Ruby object. It
39
33
  is very important to remove objects once they are destroyed
40
34
  since the same memory address may be reused later to create
41
35
  a new object. */
42
- SWIGRUNTIMEINLINE void SWIG_RubyRemoveTracking(void* ptr) {
43
- wxRuby_RemoveTracking(ptr);
44
- }
36
+ #define SWIG_RubyRemoveTracking wxRuby_RemoveTracking
45
37
 
46
38
  /* This is a helper method that unlinks a Ruby object from its
47
39
  underlying C++ object. This is needed if the lifetime of the
48
40
  Ruby object is longer than the C++ object */
49
- SWIGRUNTIMEINLINE void SWIG_RubyUnlinkObjects(void* ptr) {
50
- VALUE object = SWIG_RubyInstanceFor(ptr);
51
-
52
- if (object != Qnil) {
53
- DATA_PTR(object) = 0;
54
- }
55
- }
41
+ #define SWIG_RubyUnlinkObjects wxRuby_UnlinkObject
56
42
 
57
43
  SWIGRUNTIMEINLINE void SWIG_RubyIterateTrackings( void(*meth)(void* ptr, VALUE obj) ) {
58
- wxRuby_IterateTracking(meth);
44
+ // noop
59
45
  }
60
46
 
61
47
 
@@ -0,0 +1,434 @@
1
+ //Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ //
3
+ // This software is released under the MIT license.
4
+
5
+ #ifndef _WXRUBY_SHAREDPTR_H_
6
+ #define _WXRUBY_SHAREDPTR_H_
7
+ template <class T, class Base = T>
8
+ class WxRubySharedPtr;
9
+ #endif
10
+
11
+ %header %{
12
+ #include <wxruby-SharedPtr.h>
13
+ %}
14
+
15
+ // Main user macro for defining shared_ptr typemaps for both const and non-const pointer types
16
+ %define %wx_ruby_shared_ptr(TYPE, BASE)
17
+ %feature("smartptr", noblock=1) TYPE { WxRubySharedPtr< TYPE, BASE > }
18
+ SWIG_WXRUBY_SHARED_PTR_TYPEMAPS(, TYPE, BASE)
19
+ SWIG_WXRUBY_SHARED_PTR_TYPEMAPS(const, TYPE, BASE)
20
+ %enddef
21
+
22
+ %{
23
+ #ifdef __cplusplus
24
+ #ifndef SWIG_STD_MOVE
25
+ #if __cplusplus >=201103L
26
+ # define SWIG_STD_MOVE(OBJ) std::move(OBJ)
27
+ #else
28
+ # define SWIG_STD_MOVE(OBJ) OBJ
29
+ #endif
30
+ #endif
31
+ #endif
32
+ %}
33
+
34
+ %{
35
+ // Set WXSHARED_PTR_DISOWN to $disown if required, for example
36
+ // #define WXSHARED_PTR_DISOWN $disown
37
+ #if !defined(WXSHARED_PTR_DISOWN)
38
+ #define WXSHARED_PTR_DISOWN 0
39
+ #endif
40
+ %}
41
+
42
+ // Macro implementing all the customisations for handling the smart pointer
43
+ %define SWIG_WXRUBY_SHARED_PTR_TYPEMAPS(CONST, TYPE, BASE)
44
+
45
+ // %naturalvar is as documented for member variables
46
+ %naturalvar TYPE;
47
+ %naturalvar WxRubySharedPtr< CONST TYPE, CONST BASE >;
48
+
49
+ // destructor wrapper customisation
50
+ %feature("unref") TYPE
51
+ %{(void)arg1;
52
+ delete reinterpret_cast< WxRubySharedPtr< TYPE, BASE > * >(self);%}
53
+
54
+ // Typemap customisations...
55
+
56
+ // plain value
57
+ %typemap(in) CONST TYPE (void *argp, int res = 0) {
58
+ swig_ruby_owntype newmem = {0, 0};
59
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
60
+ if (!SWIG_IsOK(res)) {
61
+ %argument_fail(res, "$type", $symname, $argnum);
62
+ }
63
+ if (!argp) {
64
+ %argument_nullref("$type", $symname, $argnum);
65
+ } else {
66
+ $1 = *(%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *)->get());
67
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
68
+ }
69
+ }
70
+ %typemap(out) CONST TYPE {
71
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = new WxRubySharedPtr< CONST TYPE, CONST BASE >(new $1_ltype($1));
72
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
73
+ }
74
+
75
+ %typemap(varin) CONST TYPE {
76
+ void *argp = 0;
77
+ swig_ruby_owntype newmem = {0, 0};
78
+ int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
79
+ if (!SWIG_IsOK(res)) {
80
+ %variable_fail(res, "$type", "$name");
81
+ }
82
+ if (!argp) {
83
+ %variable_nullref("$type", "$name");
84
+ } else {
85
+ $1 = *(%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *)->get());
86
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
87
+ }
88
+ }
89
+ %typemap(varout) CONST TYPE {
90
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = new WxRubySharedPtr< CONST TYPE, CONST BASE >(new $1_ltype($1));
91
+ %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
92
+ }
93
+
94
+ %typemap(directorin,noblock=1) CONST TYPE (WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0) %{
95
+ smartarg = new WxRubySharedPtr< CONST TYPE, CONST BASE >(new $1_ltype(SWIG_STD_MOVE($1)));
96
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN | %newpointer_flags);
97
+ %}
98
+ %typemap(directorout,noblock=1) CONST TYPE (void *swig_argp, int swig_res = 0) {
99
+ swig_ruby_owntype newmem = {0, 0};
100
+ swig_res = SWIG_ConvertPtrAndOwn($input, &swig_argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
101
+ if (!SWIG_IsOK(swig_res)) {
102
+ %dirout_fail(swig_res, "$type");
103
+ }
104
+ if (!swig_argp) {
105
+ %dirout_nullref("$type");
106
+ } else {
107
+ $result = *(%reinterpret_cast(swig_argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *)->get());
108
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(swig_argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
109
+ }
110
+ }
111
+
112
+ // plain pointer
113
+ // Note: $disown not implemented by default as it will lead to a memory leak of the shared_ptr instance
114
+ %typemap(in) CONST TYPE * (void *argp = 0, int res = 0, WxRubySharedPtr< CONST TYPE, CONST BASE > tempshared, WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0) {
115
+ swig_ruby_owntype newmem = {0, 0};
116
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), WXSHARED_PTR_DISOWN | %convertptr_flags, &newmem);
117
+ if (!SWIG_IsOK(res)) {
118
+ %argument_fail(res, "$type", $symname, $argnum);
119
+ }
120
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
121
+ tempshared = *%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
122
+ delete %reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
123
+ $1 = %const_cast(tempshared.get(), $1_ltype);
124
+ } else {
125
+ smartarg = %reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
126
+ $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype);
127
+ }
128
+ }
129
+
130
+ %typemap(out, fragment="SWIG_null_deleter") CONST TYPE * {
131
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = $1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >($1 SWIG_NO_NULL_DELETER_$owner) : 0;
132
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), $owner | SWIG_POINTER_OWN));
133
+ }
134
+
135
+ %typemap(varin) CONST TYPE * {
136
+ void *argp = 0;
137
+ swig_ruby_owntype newmem = {0, 0};
138
+ int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
139
+ if (!SWIG_IsOK(res)) {
140
+ %variable_fail(res, "$type", "$name");
141
+ }
142
+ WxRubySharedPtr< CONST TYPE, CONST BASE > tempshared;
143
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0;
144
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
145
+ tempshared = *%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
146
+ delete %reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
147
+ $1 = %const_cast(tempshared.get(), $1_ltype);
148
+ } else {
149
+ smartarg = %reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
150
+ $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype);
151
+ }
152
+ }
153
+ %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE * {
154
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = $1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >($1 SWIG_NO_NULL_DELETER_0) : 0;
155
+ %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
156
+ }
157
+
158
+ %typemap(directorin,noblock=1, fragment="SWIG_null_deleter") CONST TYPE * (WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0) %{
159
+ smartarg = $1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >($1 SWIG_NO_NULL_DELETER_0) : 0;
160
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN | %newpointer_flags);
161
+ %}
162
+ %typemap(directorout,noblock=1) CONST TYPE * %{
163
+ #error "directorout typemap for plain pointer not implemented"
164
+ %}
165
+
166
+ // plain reference
167
+ %typemap(in) CONST TYPE & (void *argp = 0, int res = 0, WxRubySharedPtr< CONST TYPE, CONST BASE > tempshared) {
168
+ swig_ruby_owntype newmem = {0, 0};
169
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
170
+ if (!SWIG_IsOK(res)) {
171
+ %argument_fail(res, "$type", $symname, $argnum);
172
+ }
173
+ if (!argp) { %argument_nullref("$type", $symname, $argnum); }
174
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
175
+ tempshared = *%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
176
+ delete %reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
177
+ $1 = %const_cast(tempshared.get(), $1_ltype);
178
+ } else {
179
+ $1 = %const_cast(%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *)->get(), $1_ltype);
180
+ }
181
+ }
182
+ %typemap(out, fragment="SWIG_null_deleter") CONST TYPE & {
183
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = new WxRubySharedPtr< CONST TYPE, CONST BASE >($1 SWIG_NO_NULL_DELETER_$owner);
184
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
185
+ }
186
+
187
+ %typemap(varin) CONST TYPE & {
188
+ void *argp = 0;
189
+ swig_ruby_owntype newmem = {0, 0};
190
+ int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
191
+ if (!SWIG_IsOK(res)) {
192
+ %variable_fail(res, "$type", "$name");
193
+ }
194
+ WxRubySharedPtr< CONST TYPE, CONST BASE > tempshared;
195
+ if (!argp) {
196
+ %variable_nullref("$type", "$name");
197
+ }
198
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
199
+ tempshared = *%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
200
+ delete %reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
201
+ $1 = *%const_cast(tempshared.get(), $1_ltype);
202
+ } else {
203
+ $1 = *%const_cast(%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *)->get(), $1_ltype);
204
+ }
205
+ }
206
+ %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE & {
207
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = new WxRubySharedPtr< CONST TYPE, CONST BASE >(&$1 SWIG_NO_NULL_DELETER_0);
208
+ %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
209
+ }
210
+
211
+ %typemap(directorin,noblock=1, fragment="SWIG_null_deleter") CONST TYPE & (WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0) %{
212
+ smartarg = new WxRubySharedPtr< CONST TYPE, CONST BASE >(&$1 SWIG_NO_NULL_DELETER_0);
213
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN | %newpointer_flags);
214
+ %}
215
+ %typemap(directorout,noblock=1) CONST TYPE & %{
216
+ #error "directorout typemap for plain reference not implemented"
217
+ %}
218
+
219
+ // plain pointer by reference
220
+ // Note: $disown not implemented by default as it will lead to a memory leak of the shared_ptr instance
221
+ %typemap(in) TYPE *CONST& (void *argp = 0, int res = 0, $*1_ltype temp = 0, WxRubySharedPtr< CONST TYPE, CONST BASE > tempshared) {
222
+ swig_ruby_owntype newmem = {0, 0};
223
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), WXSHARED_PTR_DISOWN | %convertptr_flags, &newmem);
224
+ if (!SWIG_IsOK(res)) {
225
+ %argument_fail(res, "$type", $symname, $argnum);
226
+ }
227
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
228
+ tempshared = *%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
229
+ delete %reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *);
230
+ temp = %const_cast(tempshared.get(), $*1_ltype);
231
+ } else {
232
+ temp = %const_cast(%reinterpret_cast(argp, WxRubySharedPtr< CONST TYPE, CONST BASE > *)->get(), $*1_ltype);
233
+ }
234
+ $1 = &temp;
235
+ }
236
+ %typemap(out, fragment="SWIG_null_deleter") TYPE *CONST& {
237
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = *$1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >(*$1 SWIG_NO_NULL_DELETER_$owner) : 0;
238
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
239
+ }
240
+
241
+ %typemap(varin) TYPE *CONST& %{
242
+ #error "varin typemap not implemented"
243
+ %}
244
+ %typemap(varout) TYPE *CONST& %{
245
+ #error "varout typemap not implemented"
246
+ %}
247
+
248
+ %typemap(directorin,noblock=1, fragment="SWIG_null_deleter") TYPE *CONST& (WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0) %{
249
+ smartarg = $1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >($1 SWIG_NO_NULL_DELETER_0) : 0;
250
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN | %newpointer_flags);
251
+ %}
252
+ %typemap(directorout,noblock=1) TYPE *CONST& %{
253
+ #error "directorout typemap for plain pointer by reference not implemented"
254
+ %}
255
+
256
+ // shared_ptr by value
257
+ %typemap(in) WxRubySharedPtr< CONST TYPE, CONST BASE > (void *argp, int res = 0) {
258
+ swig_ruby_owntype newmem = {0, 0};
259
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
260
+ if (!SWIG_IsOK(res)) {
261
+ %argument_fail(res, "$type", $symname, $argnum);
262
+ }
263
+ if (argp) $1 = *(%reinterpret_cast(argp, $&ltype));
264
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $&ltype);
265
+ }
266
+ %typemap(out) WxRubySharedPtr< CONST TYPE, CONST BASE > {
267
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = $1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >($1) : 0;
268
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
269
+ }
270
+
271
+ %typemap(varin) WxRubySharedPtr< CONST TYPE, CONST BASE > {
272
+ swig_ruby_owntype newmem = {0, 0};
273
+ void *argp = 0;
274
+ int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
275
+ if (!SWIG_IsOK(res)) {
276
+ %variable_fail(res, "$type", "$name");
277
+ }
278
+ $1 = argp ? *(%reinterpret_cast(argp, $&ltype)) : WxRubySharedPtr< TYPE, BASE >();
279
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $&ltype);
280
+ }
281
+ %typemap(varout) WxRubySharedPtr< CONST TYPE, CONST BASE > {
282
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = $1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >($1) : 0;
283
+ %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
284
+ }
285
+
286
+ %typemap(directorin,noblock=1) WxRubySharedPtr< CONST TYPE, CONST BASE > (WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0) %{
287
+ smartarg = $1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >($1) : 0;
288
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN | %newpointer_flags);
289
+ %}
290
+ %typemap(directorout,noblock=1) WxRubySharedPtr< CONST TYPE, CONST BASE > (void *swig_argp, int swig_res = 0) {
291
+ swig_ruby_owntype newmem = {0, 0};
292
+ swig_res = SWIG_ConvertPtrAndOwn($input, &swig_argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
293
+ if (!SWIG_IsOK(swig_res)) {
294
+ %dirout_fail(swig_res, "$type");
295
+ }
296
+ if (swig_argp) {
297
+ $result = *(%reinterpret_cast(swig_argp, $&ltype));
298
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(swig_argp, $&ltype);
299
+ }
300
+ }
301
+
302
+ // shared_ptr by reference
303
+ %typemap(in) WxRubySharedPtr< CONST TYPE, CONST BASE > & (void *argp, int res = 0, $*1_ltype tempshared) {
304
+ swig_ruby_owntype newmem = {0, 0};
305
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
306
+ if (!SWIG_IsOK(res)) {
307
+ %argument_fail(res, "$type", $symname, $argnum);
308
+ }
309
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
310
+ if (argp) tempshared = *%reinterpret_cast(argp, $ltype);
311
+ delete %reinterpret_cast(argp, $ltype);
312
+ $1 = &tempshared;
313
+ } else {
314
+ $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared;
315
+ }
316
+ }
317
+ %typemap(out) WxRubySharedPtr< CONST TYPE, CONST BASE > & {
318
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = *$1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >(*$1) : 0;
319
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
320
+ }
321
+
322
+ %typemap(varin) WxRubySharedPtr< CONST TYPE, CONST BASE > & %{
323
+ #error "varin typemap not implemented"
324
+ %}
325
+ %typemap(varout) WxRubySharedPtr< CONST TYPE, CONST BASE > & %{
326
+ #error "varout typemap not implemented"
327
+ %}
328
+
329
+ %typemap(directorin,noblock=1) WxRubySharedPtr< CONST TYPE, CONST BASE > & (WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0) %{
330
+ smartarg = $1 ? new WxRubySharedPtr< CONST TYPE, CONST BASE >($1) : 0;
331
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN | %newpointer_flags);
332
+ %}
333
+ %typemap(directorout,noblock=1) WxRubySharedPtr< CONST TYPE, CONST BASE > & %{
334
+ #error "directorout typemap for shared_ptr ref not implemented"
335
+ %}
336
+
337
+ // shared_ptr by pointer
338
+ %typemap(in) WxRubySharedPtr< CONST TYPE, CONST BASE > * (void *argp, int res = 0, $*1_ltype tempshared) {
339
+ swig_ruby_owntype newmem = {0, 0};
340
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
341
+ if (!SWIG_IsOK(res)) {
342
+ %argument_fail(res, "$type", $symname, $argnum);
343
+ }
344
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
345
+ if (argp) tempshared = *%reinterpret_cast(argp, $ltype);
346
+ delete %reinterpret_cast(argp, $ltype);
347
+ $1 = &tempshared;
348
+ } else {
349
+ $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared;
350
+ }
351
+ }
352
+ %typemap(out) WxRubySharedPtr< CONST TYPE, CONST BASE > * {
353
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = ($1 && *$1) ? new WxRubySharedPtr< CONST TYPE, CONST BASE >(*$1) : 0;
354
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
355
+ if ($owner) delete $1;
356
+ }
357
+
358
+ %typemap(varin) WxRubySharedPtr< CONST TYPE, CONST BASE > * %{
359
+ #error "varin typemap not implemented"
360
+ %}
361
+ %typemap(varout) WxRubySharedPtr< CONST TYPE, CONST BASE > * %{
362
+ #error "varout typemap not implemented"
363
+ %}
364
+
365
+ %typemap(directorin,noblock=1) WxRubySharedPtr< CONST TYPE, CONST BASE > * (WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0) %{
366
+ smartarg = ($1 && *$1) ? new WxRubySharedPtr< CONST TYPE, CONST BASE >(*$1) : 0;
367
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN | %newpointer_flags);
368
+ %}
369
+ %typemap(directorout,noblock=1) WxRubySharedPtr< CONST TYPE, CONST BASE > * %{
370
+ #error "directorout typemap for pointer to shared_ptr not implemented"
371
+ %}
372
+
373
+ // shared_ptr by pointer reference
374
+ %typemap(in) WxRubySharedPtr< CONST TYPE, CONST BASE > *& (void *argp, int res = 0, WxRubySharedPtr< CONST TYPE, CONST BASE > tempshared, $*1_ltype temp = 0) {
375
+ swig_ruby_owntype newmem = {0, 0};
376
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(WxRubySharedPtr< TYPE, BASE > *), %convertptr_flags, &newmem);
377
+ if (!SWIG_IsOK(res)) {
378
+ %argument_fail(res, "$type", $symname, $argnum);
379
+ }
380
+ if (argp) tempshared = *%reinterpret_cast(argp, $*ltype);
381
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $*ltype);
382
+ temp = &tempshared;
383
+ $1 = &temp;
384
+ }
385
+ %typemap(out) WxRubySharedPtr< CONST TYPE, CONST BASE > *& {
386
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *smartresult = (*$1 && **$1) ? new WxRubySharedPtr< CONST TYPE, CONST BASE >(**$1) : 0;
387
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN));
388
+ }
389
+
390
+ %typemap(varin) WxRubySharedPtr< CONST TYPE, CONST BASE > *& %{
391
+ #error "varin typemap not implemented"
392
+ %}
393
+ %typemap(varout) WxRubySharedPtr< CONST TYPE, CONST BASE > *& %{
394
+ #error "varout typemap not implemented"
395
+ %}
396
+
397
+ %typemap(directorin,noblock=1) WxRubySharedPtr< CONST TYPE, CONST BASE > *& (WxRubySharedPtr< CONST TYPE, CONST BASE > *smartarg = 0) %{
398
+ smartarg = ($1 && *$1) ? new WxRubySharedPtr< CONST TYPE, CONST BASE >(*$1) : 0;
399
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(WxRubySharedPtr< TYPE, BASE > *), SWIG_POINTER_OWN | %newpointer_flags);
400
+ %}
401
+ %typemap(directorout,noblock=1) WxRubySharedPtr< CONST TYPE, CONST BASE > *& %{
402
+ #error "directorout typemap for pointer ref to shared_ptr not implemented"
403
+ %}
404
+
405
+ // Typecheck typemaps
406
+ // Note: SWIG_ConvertPtr with void ** parameter set to 0 instead of using SWIG_ConvertPtrAndOwn, so that the casting
407
+ // function is not called thereby avoiding a possible smart pointer copy constructor call when casting up the inheritance chain.
408
+ %typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER, equivalent="TYPE *", noblock=1)
409
+ TYPE CONST,
410
+ TYPE CONST &,
411
+ TYPE CONST *,
412
+ TYPE *CONST&,
413
+ WxRubySharedPtr< CONST TYPE, CONST BASE >,
414
+ WxRubySharedPtr< CONST TYPE, CONST BASE > &,
415
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *,
416
+ WxRubySharedPtr< CONST TYPE, CONST BASE > *& {
417
+ int res = SWIG_ConvertPtr($input, 0, $descriptor(WxRubySharedPtr< TYPE, BASE > *), 0);
418
+ $1 = SWIG_CheckState(res);
419
+ }
420
+
421
+
422
+ // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug
423
+ %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
424
+ #error "typemaps for $1_type not available"
425
+ %}
426
+ %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
427
+ #error "typemaps for $1_type not available"
428
+ %}
429
+
430
+
431
+ %template() WxRubySharedPtr< CONST TYPE, CONST BASE >;
432
+
433
+
434
+ %enddef