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.
- checksums.yaml +4 -4
- data/INSTALL.md +27 -2
- data/README.md +15 -15
- data/ext/wxruby3/include/wxRubyApp.h +145 -46
- data/ext/wxruby3/include/wxruby-ComboPopup.h +25 -8
- data/ext/wxruby3/include/wxruby-GCTracking.h +262 -0
- data/ext/wxruby3/include/wxruby-MBConv.h +190 -0
- data/ext/wxruby3/include/wxruby-SharedEventHandler.h +183 -0
- data/ext/wxruby3/include/wxruby-SharedPtr.h +104 -0
- data/ext/wxruby3/include/wxruby-runtime.h +29 -0
- data/ext/wxruby3/swig/custom/rubytracking.swg +8 -22
- data/ext/wxruby3/swig/custom/wx_ruby_shared_ptr.i +434 -0
- data/ext/wxruby3/swig/custom/wx_shared_ptr.i +431 -0
- data/ext/wxruby3/swig/mark_free_impl.i +7 -132
- data/ext/wxruby3/swig/memory_management.i +8 -44
- data/ext/wxruby3/swig/wx.i +46 -73
- data/lib/wx/core/const.rb +0 -1
- data/lib/wx/core/context_help.rb +17 -0
- data/lib/wx/core/cursor.rb +1 -0
- data/lib/wx/core/helpcontrollerhelpprovider.rb +10 -2
- data/lib/wx/core/mbconv.rb +11 -0
- data/lib/wx/core/media_ctrl.rb +31 -0
- data/lib/wx/core/top_level_window.rb +7 -0
- data/lib/wx/core.rb +6 -0
- data/lib/wx/doc/art_provider.rb +17 -0
- data/lib/wx/doc/context_help.rb +42 -0
- data/lib/wx/doc/core.rb +0 -5
- data/lib/wx/doc/functions.rb +10 -0
- data/lib/wx/doc/gen/affine_matrix2d.rb +2 -0
- data/lib/wx/doc/gen/art_provider.rb +12 -0
- data/lib/wx/doc/gen/aui/aui_notebook_event.rb +15 -15
- data/lib/wx/doc/gen/aui/aui_pane_info.rb +8 -8
- data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +5 -5
- data/lib/wx/doc/gen/book_ctrl_base.rb +2 -1
- data/lib/wx/doc/gen/calendar_event.rb +5 -5
- data/lib/wx/doc/gen/choicebook.rb +2 -2
- data/lib/wx/doc/gen/collapsible_pane.rb +1 -1
- data/lib/wx/doc/gen/colour_dialog.rb +1 -1
- data/lib/wx/doc/gen/colour_picker_event.rb +3 -3
- data/lib/wx/doc/gen/context_help_button.rb +0 -53
- data/lib/wx/doc/gen/core.rb +4 -4
- data/lib/wx/doc/gen/credential_entry_dialog.rb +2 -2
- data/lib/wx/doc/gen/date_event.rb +2 -2
- data/lib/wx/doc/gen/dial_up_event.rb +2 -2
- data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +2 -2
- data/lib/wx/doc/gen/event.rb +58 -58
- data/lib/wx/doc/gen/ext_help_controller.rb +62 -16
- data/lib/wx/doc/gen/file_ctrl.rb +4 -4
- data/lib/wx/doc/gen/file_dir_picker_event.rb +2 -2
- data/lib/wx/doc/gen/file_system.rb +1 -1
- data/lib/wx/doc/gen/find_dialog_event.rb +5 -5
- data/lib/wx/doc/gen/font_picker_event.rb +1 -1
- data/lib/wx/doc/gen/grid/grid_ctrl.rb +67 -32
- data/lib/wx/doc/gen/header_ctrl_event.rb +13 -13
- data/lib/wx/doc/gen/help_controller.rb +45 -2
- data/lib/wx/doc/gen/html/html_help_controller.rb +74 -32
- data/lib/wx/doc/gen/html/html_help_window.rb +3 -3
- data/lib/wx/doc/gen/html/html_window.rb +4 -4
- data/lib/wx/doc/gen/hyperlink_ctrl.rb +1 -1
- data/lib/wx/doc/gen/list_ctrl.rb +22 -22
- data/lib/wx/doc/gen/listbook.rb +2 -2
- data/lib/wx/doc/gen/mb_conv.rb +10 -0
- data/lib/wx/doc/gen/media_event.rb +6 -6
- data/lib/wx/doc/gen/notebook.rb +2 -2
- data/lib/wx/doc/gen/pg/pg_validation_info.rb +14 -14
- data/lib/wx/doc/gen/pg/property_grid_interface.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +19 -9
- data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +3 -3
- data/lib/wx/doc/gen/rbn/ribbon_panel.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +2 -2
- data/lib/wx/doc/gen/rt/event_list.rb +17 -0
- data/lib/wx/doc/gen/rt/shared_evt_handler.rb +14 -0
- data/lib/wx/doc/gen/rt/thread_event.rb +71 -0
- data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +19 -19
- data/lib/wx/doc/gen/sash_event.rb +2 -2
- data/lib/wx/doc/gen/sash_layout_window.rb +2 -2
- data/lib/wx/doc/gen/search_ctrl.rb +2 -2
- data/lib/wx/doc/gen/spin_ctrl.rb +2 -2
- data/lib/wx/doc/gen/splitter_window.rb +6 -6
- data/lib/wx/doc/gen/stc/styled_text_event.rb +34 -34
- data/lib/wx/doc/gen/task_bar_icon_event.rb +10 -10
- data/lib/wx/doc/gen/text_ctrl.rb +4 -4
- data/lib/wx/doc/gen/toggle_button.rb +1 -1
- data/lib/wx/doc/gen/toolbook.rb +2 -2
- data/lib/wx/doc/gen/top_level_window.rb +19 -0
- data/lib/wx/doc/gen/tree_ctrl.rb +21 -21
- data/lib/wx/doc/gen/treebook.rb +4 -4
- data/lib/wx/doc/gen/utils.rb +2 -2
- data/lib/wx/doc/gen/web/event_list.rb +95 -0
- data/lib/wx/doc/gen/web/web_view.rb +1136 -0
- data/lib/wx/doc/gen/web/web_view_event.rb +210 -0
- data/lib/wx/doc/gen/web/web_view_handler.rb +318 -0
- data/lib/wx/doc/gen/window.rb +1 -1
- data/lib/wx/doc/gen/wizard_event.rb +7 -7
- data/lib/wx/doc/html/html_help_controller.rb +23 -1
- data/lib/wx/doc/mbconv.rb +108 -0
- data/lib/wx/doc/rt/shared_event_handler.rb +49 -0
- data/lib/wx/doc/rt/thread_event.rb +28 -0
- data/lib/wx/doc/webview.rb +40 -0
- data/lib/wx/helpers.rb +1 -1
- data/lib/wx/html/htmlhelpcontroller.rb +10 -0
- data/lib/wx/keyword_defs.rb +11 -0
- data/lib/wx/rt/events/evt_list.rb +8 -0
- data/lib/wx/rt/require.rb +8 -0
- data/lib/wx/rt/thread_event.rb +14 -0
- data/lib/wx/rt.rb +16 -0
- data/lib/wx/version.rb +1 -1
- data/lib/wx/web/events/evt_list.rb +74 -0
- data/lib/wx/web/require.rb +8 -0
- data/lib/wx/web/webview.rb +106 -0
- data/lib/wx/web.rb +17 -0
- data/lib/wx/wxruby/cmd/setup.rb +15 -0
- data/lib/wx.rb +2 -0
- data/rakelib/configure.rb +24 -0
- data/rakelib/gem.rb +3 -2
- data/rakelib/install.rb +54 -27
- data/rakelib/lib/config/macosx.rb +7 -5
- data/rakelib/lib/config/mingw.rb +66 -5
- data/rakelib/lib/config/pkgman/mingw.rb +1 -1
- data/rakelib/lib/config/unixish.rb +4 -2
- data/rakelib/lib/config.rb +37 -3
- data/rakelib/lib/core/include/client_data.inc +38 -17
- data/rakelib/lib/core/include/funcall.inc +1 -1
- data/rakelib/lib/core/include/swigdirector.inc +3 -3
- data/rakelib/lib/core/include/swigrubyrun.inc +14 -26
- data/rakelib/lib/core/package.rb +0 -2
- data/rakelib/lib/director/app.rb +1 -8
- data/rakelib/lib/director/art_provider.rb +7 -3
- data/rakelib/lib/director/comboctrl.rb +0 -7
- data/rakelib/lib/director/context_help_button.rb +35 -2
- data/rakelib/lib/director/event_handler.rb +32 -28
- data/rakelib/lib/director/fs_file.rb +15 -10
- data/rakelib/lib/director/functions.rb +8 -0
- data/rakelib/lib/director/grid_cell_attr.rb +1 -3
- data/rakelib/lib/director/grid_cell_editor.rb +14 -12
- data/rakelib/lib/director/grid_cell_renderer.rb +11 -8
- data/rakelib/lib/director/grid_ctrl.rb +140 -121
- data/rakelib/lib/director/help_controller.rb +70 -2
- data/rakelib/lib/director/mb_conv.rb +30 -0
- data/rakelib/lib/director/menu.rb +92 -42
- data/rakelib/lib/director/menu_bar.rb +84 -45
- data/rakelib/lib/director/menu_item.rb +2 -2
- data/rakelib/lib/director/persistence_manager.rb +3 -2
- data/rakelib/lib/director/preview_frame.rb +2 -2
- data/rakelib/lib/director/richtext_buffer.rb +5 -2
- data/rakelib/lib/director/shared_evt_handler.rb +30 -0
- data/rakelib/lib/director/sizer.rb +8 -17
- data/rakelib/lib/director/sizer_item.rb +3 -4
- data/rakelib/lib/director/task_bar_icon.rb +7 -7
- data/rakelib/lib/director/thread_event.rb +33 -0
- data/rakelib/lib/director/validator.rb +3 -1
- data/rakelib/lib/director/variant.rb +16 -12
- data/rakelib/lib/director/webview.rb +166 -0
- data/rakelib/lib/director/webview_event.rb +37 -0
- data/rakelib/lib/director/webview_handler.rb +63 -0
- data/rakelib/lib/generate/doc/thread_event.yaml +20 -0
- data/rakelib/lib/generate/doc/web_view.yaml +135 -0
- data/rakelib/lib/generate/doc/web_view_event.yaml +38 -0
- data/rakelib/lib/generate/doc/web_view_handler.yaml +58 -0
- data/rakelib/lib/specs/interfaces.rb +12 -0
- data/rakelib/lib/typemap/common.rb +34 -1
- data/rakelib/lib/typemap/mb_conv.rb +58 -0
- data/rakelib/prepost.rake +23 -31
- data/rakelib/prepost.rb +20 -0
- data/samples/event/threaded.rb +295 -42
- data/samples/event/tn_threaded.png +0 -0
- data/samples/help/doc/back.gif +0 -0
- data/samples/help/doc/contents.gif +0 -0
- data/samples/help/doc/cshelp.txt +9 -0
- data/samples/help/doc/doc.chm +0 -0
- data/samples/help/doc/doc.cnt +8 -0
- data/samples/help/doc/doc.h +7 -0
- data/samples/help/doc/doc.hhc +40 -0
- data/samples/help/doc/doc.hhk +31 -0
- data/samples/help/doc/doc.hhp +33 -0
- data/samples/help/doc/doc.hpj +21 -0
- data/samples/help/doc/doc.htm +27 -0
- data/samples/help/doc/doc1.htm +24 -0
- data/samples/help/doc/doc2.htm +12 -0
- data/samples/help/doc/doc3.htm +12 -0
- data/samples/help/doc/doc4.htm +12 -0
- data/samples/help/doc/doc5.htm +14 -0
- data/samples/help/doc/forward.gif +0 -0
- data/samples/help/doc/up.gif +0 -0
- data/samples/help/doc.chm +0 -0
- data/samples/help/doc.chw +0 -0
- data/samples/help/doc.zip +0 -0
- data/samples/help/help.rb +352 -0
- data/samples/help/tn_help.png +0 -0
- data/samples/webview/handler_advanced.html +55 -0
- data/samples/webview/tn_webview.png +0 -0
- data/samples/webview/webview.rb +1264 -0
- data/tests/assets/handler_advanced.html +55 -0
- data/tests/assets/test.css +1 -0
- data/tests/assets/test.html +9 -0
- data/tests/assets/test.zip +0 -0
- data/tests/lib/text_entry_tests.rb +2 -2
- data/tests/lib/wxapp_runner.rb +40 -0
- data/tests/lib/wxframe_runner.rb +17 -2
- data/tests/test_art.rb +8 -8
- data/tests/test_clipboard.rb +4 -4
- data/tests/test_config.rb +6 -6
- data/tests/test_exceptions.rb +8 -6
- data/tests/test_ext_controls.rb +3 -3
- data/tests/test_file_dialog.rb +5 -5
- data/tests/test_font.rb +7 -7
- data/tests/test_grid_ctrl.rb +133 -0
- data/tests/test_help.rb +88 -0
- data/tests/test_intl.rb +1 -1
- data/tests/test_media_ctrl.rb +14 -6
- data/tests/test_menu.rb +94 -86
- data/tests/test_persistence.rb +1 -1
- data/tests/test_proof_check.rb +5 -5
- data/tests/test_propgrid.rb +1 -1
- data/tests/test_shared_event_handler.rb +141 -0
- data/tests/test_std_controls.rb +5 -5
- data/tests/test_webview.rb +492 -0
- data/tests/test_window.rb +3 -3
- 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
|
|
24
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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, $<ype));
|
|
264
|
+
if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $<ype);
|
|
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, $<ype)) : WxRubySharedPtr< TYPE, BASE >();
|
|
279
|
+
if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $<ype);
|
|
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, $<ype));
|
|
298
|
+
if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(swig_argp, $<ype);
|
|
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
|