wxruby3 0.9.0 → 0.9.1

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/ext/wxruby3/include/wxruby-runtime.h +3 -0
  3. data/ext/wxruby3/swig/common.i +22 -0
  4. data/ext/wxruby3/swig/custom/director.swg +296 -0
  5. data/ext/wxruby3/swig/custom/rubyapi.swg +19 -0
  6. data/ext/wxruby3/swig/custom/rubyerrors.swg +45 -0
  7. data/ext/wxruby3/swig/custom/rubyhead.swg +192 -0
  8. data/ext/wxruby3/swig/custom/rubyrun.swg +187 -0
  9. data/ext/wxruby3/swig/custom/swigrun.swg +363 -0
  10. data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +173 -0
  11. data/ext/wxruby3/swig/wx.i +50 -30
  12. data/lib/wx/core/const.rb +83 -0
  13. data/lib/wx/doc/const.rb +66 -66
  14. data/lib/wx/doc/event.rb +0 -6
  15. data/lib/wx/doc/functions.rb +9 -9
  16. data/lib/wx/doc/window.rb +5 -0
  17. data/lib/wx/keyword_defs.rb +43 -6
  18. data/lib/wx/version.rb +1 -1
  19. data/rakelib/lib/config/macosx.rb +1 -1
  20. data/rakelib/lib/core/include/funcall.inc +33 -14
  21. data/rakelib/lib/core/include/swigdirector.inc +384 -0
  22. data/rakelib/lib/core/include/swigrubyerrors.inc +161 -0
  23. data/{ext/wxruby3/swig/custom/swig4/rubyrun.swg → rakelib/lib/core/include/swigrubyrun.inc} +245 -120
  24. data/rakelib/lib/core/include/swigrun.inc +700 -0
  25. data/rakelib/lib/core/package.rb +5 -2
  26. data/rakelib/lib/core/parameter.rb +3 -0
  27. data/rakelib/lib/director/accelerator.rb +1 -1
  28. data/rakelib/lib/director/animation.rb +1 -1
  29. data/rakelib/lib/director/animation_ctrl.rb +20 -0
  30. data/rakelib/lib/director/app.rb +23 -5
  31. data/rakelib/lib/director/art_provider.rb +1 -1
  32. data/rakelib/lib/director/data_object_simple_base.rb +1 -2
  33. data/rakelib/lib/director/dialog.rb +5 -0
  34. data/rakelib/lib/director/dialup_event.rb +44 -0
  35. data/rakelib/lib/director/dialup_manager.rb +45 -0
  36. data/rakelib/lib/director/event.rb +20 -2
  37. data/rakelib/lib/director/file_ctrl.rb +35 -0
  38. data/rakelib/lib/director/file_ctrl_event.rb +26 -0
  39. data/rakelib/lib/director/gdicommon.rb +19 -1
  40. data/rakelib/lib/director/grid_cell_editor.rb +6 -6
  41. data/rakelib/lib/director/help_controller.rb +1 -1
  42. data/rakelib/lib/director/pgarray_editor_dialog.rb +0 -6
  43. data/rakelib/lib/director/pgeditor.rb +2 -2
  44. data/rakelib/lib/director/pgproperties.rb +2 -2
  45. data/rakelib/lib/director/richtext_buffer.rb +1 -1
  46. data/rakelib/lib/director/richtext_ctrl.rb +1 -1
  47. data/rakelib/lib/director/sash_event.rb +42 -0
  48. data/rakelib/lib/director/sizer.rb +64 -1
  49. data/rakelib/lib/director/sizer_item.rb +22 -0
  50. data/rakelib/lib/director/task_bar_icon.rb +1 -1
  51. data/rakelib/lib/director/tree_ctrl.rb +19 -44
  52. data/rakelib/lib/generate/doc/animation_ctrl.yaml +15 -0
  53. data/rakelib/lib/generate/doc/events.yaml +10 -4
  54. data/rakelib/lib/generate/doc/static_box.yaml +8 -0
  55. data/rakelib/lib/generate/doc/xml_resource.yaml +3 -0
  56. data/rakelib/lib/generate/doc.rb +14 -3
  57. data/rakelib/lib/generate/interface.rb +4 -3
  58. data/rakelib/lib/specs/interfaces.rb +5 -1
  59. data/rakelib/lib/swig_runner.rb +4 -50
  60. data/rakelib/lib/typemap/common.rb +24 -9
  61. data/rakelib/lib/typemap/data_format.rb +1 -1
  62. data/rakelib/lib/typemap/data_object_data.rb +2 -2
  63. data/rakelib/lib/typemap/pgprop_arg.rb +7 -2
  64. data/rakelib/lib/typemap/points_list.rb +5 -7
  65. data/rakelib/lib/util/string.rb +10 -8
  66. data/samples/text/richtext.rb +0 -30
  67. data/tests/test_app_exit_exception.rb +36 -0
  68. data/tests/test_app_init_exception.rb +20 -0
  69. data/tests/test_book_controls.rb +29 -0
  70. data/tests/test_exceptions.rb +41 -0
  71. data/tests/test_sizer.rb +43 -0
  72. data/tests/test_std_controls.rb +36 -0
  73. metadata +25 -4
  74. data/ext/wxruby3/swig/custom/swig3/rubyrun.swg +0 -456
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59678c4c6766131dea4df3bb86f3b441bed72710a917b8d6b0372317f19569e5
4
- data.tar.gz: f69f9a17c668284d05adc75adde8e8b5d054a3af261d4ffbf868777226d8e2fe
3
+ metadata.gz: 8b5236fc5965ca7cb7f44f6ffa69c74af04529217c2ac85178b04b719781407c
4
+ data.tar.gz: 745d4f4b7b6168a764d47dfa640128666a57922bf90c9d43757a7726ae4d3c75
5
5
  SHA512:
6
- metadata.gz: 8349245892666dd2af662e8239f5d2b5d36ba59938437b5c47376fb8222e88e659aefa67b6551f773e00900440402953550fd53b684193670a53fa3695ff9c34
7
- data.tar.gz: 4a827aa4999b34da4a240908edd356435a4b117562ccb2d3b3bb54d5c9358c64ca65c61d78b22f25c3191648b691288e89b109fc6c9666bc22ceef36abe2e39c
6
+ metadata.gz: 613f0bce684a98834ddc99031b1dbe0cb4aa04448d8f88aa20dd1cf71c938d3539e0e26ec46a096373a83fc2c542f73d9163ca0e1be2428c3854a583f3e974da
7
+ data.tar.gz: 888271b35ed4a18bd776c8249ae5bc83ec51ec7930d1b58954e829da508ceb500fcf14e0340009a0410c2e009a5ffbf99109a5a22a447ca52b00982d722800e3
@@ -62,6 +62,9 @@ WXRUBY_EXPORT bool GC_IsWindowDeleted(void *ptr);
62
62
  WXRUBY_EXPORT swig_type_info* wxRuby_GetSwigTypeForClass(VALUE cls);
63
63
  WXRUBY_EXPORT swig_type_info* wxRuby_GetSwigTypeForClassName(const char* clsname);
64
64
  WXRUBY_EXPORT void wxRuby_SetSwigTypeForClass(VALUE cls, swig_type_info* ty);
65
+ // and wx class names -> Ruby class
66
+ WXRUBY_EXPORT void wxRuby_SetRbClassForWxName(const wxString& wx_name, VALUE cls);
67
+ WXRUBY_EXPORT VALUE wxRuby_GetRbClassForWxName(const wxString& wx_name);
65
68
 
66
69
  // Common wrapping functions
67
70
  WXRUBY_EXPORT VALUE wxRuby_WrapWxObjectInRuby(wxObject* obj);
@@ -13,6 +13,28 @@
13
13
  %feature("compactdefaultargs");
14
14
  %feature("flatnested");
15
15
 
16
+ %exception {
17
+ try {
18
+ $action
19
+ }
20
+ catch (const Swig::DirectorException& swigex) {
21
+ if (rb_obj_is_kind_of(swigex.getError(), rb_eException))
22
+ {
23
+ rb_exc_raise(swigex.getError());
24
+ }
25
+ else
26
+ {
27
+ rb_raise(swigex.getError(), swigex.what());
28
+ }
29
+ }
30
+ catch (const std::exception& ex) {
31
+ rb_raise(rb_eRuntimeError, "Unexpected C++ exception: %s", ex.what());
32
+ }
33
+ catch (...) {
34
+ rb_raise(rb_eRuntimeError, "Unexpected UNKNOWN exception");
35
+ }
36
+ }
37
+
16
38
  %begin %{
17
39
  /*
18
40
  * Since SWIG does not provide readily usable export macros
@@ -0,0 +1,296 @@
1
+ /* -----------------------------------------------------------------------------
2
+ * director.swg
3
+ *
4
+ * This file contains support for director classes so that Ruby proxy
5
+ * methods can be called from C++.
6
+ *
7
+ * Customized for wxRuby3.
8
+ * Copyright (c) 2023 M.J.N. Corino, The Netherlands
9
+ *
10
+ * This software is released under the MIT license.
11
+ * ----------------------------------------------------------------------------- */
12
+
13
+ // fixed
14
+ #ifndef SWIG_DIRECTOR_NOUEH
15
+ #define SWIG_DIRECTOR_NOUEH
16
+ #endif
17
+
18
+ #include <string>
19
+ #include <iostream>
20
+ #include <exception>
21
+ #include <map>
22
+
23
+ # define SWIG_DIRECTOR_CAST(ARG) dynamic_cast<Swig::Director *>(ARG)
24
+
25
+ namespace Swig {
26
+
27
+ /* memory handler */
28
+ struct WXRUBY_EXPORT GCItem
29
+ {
30
+ virtual ~GCItem();
31
+
32
+ virtual swig_ruby_owntype get_own() const;
33
+ };
34
+
35
+ struct WXRUBY_EXPORT GCItem_var
36
+ {
37
+ GCItem_var(GCItem *item = 0) : _item(item) {}
38
+
39
+ GCItem_var& operator=(GCItem *item);
40
+
41
+ ~GCItem_var()
42
+ {
43
+ delete _item;
44
+ }
45
+
46
+ GCItem *operator->() const
47
+ {
48
+ return _item;
49
+ }
50
+
51
+ private:
52
+ GCItem *_item;
53
+ };
54
+
55
+ template <typename Type>
56
+ struct GCItem_T : GCItem
57
+ {
58
+ GCItem_T(Type *ptr) : _ptr(ptr) {}
59
+
60
+ virtual ~GCItem_T()
61
+ {
62
+ delete _ptr;
63
+ }
64
+
65
+ private:
66
+ Type *_ptr;
67
+ };
68
+
69
+ struct WXRUBY_EXPORT GCItem_Object : GCItem
70
+ {
71
+ GCItem_Object(swig_ruby_owntype own) : _own(own) {}
72
+
73
+ virtual ~GCItem_Object() {}
74
+
75
+ swig_ruby_owntype get_own() const
76
+ {
77
+ return _own;
78
+ }
79
+
80
+ private:
81
+ swig_ruby_owntype _own;
82
+ };
83
+
84
+ template <typename Type>
85
+ struct GCArray_T : GCItem
86
+ {
87
+ GCArray_T(Type *ptr) : _ptr(ptr) {}
88
+
89
+ virtual ~GCArray_T()
90
+ {
91
+ delete[] _ptr;
92
+ }
93
+
94
+ private:
95
+ Type *_ptr;
96
+ };
97
+
98
+ /* Base class for director exceptions */
99
+ class WXRUBY_EXPORT DirectorException : public std::exception
100
+ {
101
+ protected:
102
+ VALUE swig_error;
103
+ std::string swig_msg;
104
+ protected:
105
+ DirectorException(VALUE error) : swig_error(error) {}
106
+
107
+ DirectorException(VALUE error, const char *hdr, const char *msg ="");
108
+
109
+ void setup_error(VALUE error);
110
+
111
+ public:
112
+ virtual ~DirectorException() throw();
113
+
114
+ VALUE getType() const
115
+ {
116
+ return CLASS_OF(swig_error);
117
+ }
118
+
119
+ VALUE getError() const
120
+ {
121
+ return swig_error;
122
+ }
123
+
124
+ /* Deprecated, use what() instead */
125
+ const std::string& getMessage() const
126
+ {
127
+ return swig_msg;
128
+ }
129
+
130
+ const char *what() const throw()
131
+ {
132
+ return swig_msg.c_str();
133
+ }
134
+ };
135
+
136
+ /* Type mismatch in the return value from a Ruby method call */
137
+ class WXRUBY_EXPORT DirectorTypeMismatchException : public DirectorException
138
+ {
139
+ public:
140
+ DirectorTypeMismatchException(VALUE error, const char *msg="")
141
+ : DirectorException(error, "SWIG director type mismatch", msg)
142
+ {}
143
+
144
+ DirectorTypeMismatchException(const char *msg="")
145
+ : DirectorException(rb_eTypeError, "SWIG director type mismatch", msg)
146
+ {}
147
+
148
+ DirectorTypeMismatchException(VALUE self, const char *method, VALUE error, const char *msg="");
149
+
150
+ static inline void raise(VALUE error, const char *msg)
151
+ {
152
+ throw DirectorTypeMismatchException(error, msg);
153
+ }
154
+
155
+ static inline void raise(const char *msg)
156
+ {
157
+ throw DirectorTypeMismatchException(msg);
158
+ }
159
+
160
+ static inline void raise(VALUE self, const char* method, VALUE error, const char *msg)
161
+ {
162
+ throw DirectorTypeMismatchException(self, method, error, msg);
163
+ }
164
+ };
165
+
166
+ /* Any Ruby exception that occurs during a director method call */
167
+ class WXRUBY_EXPORT DirectorMethodException : public DirectorException
168
+ {
169
+ public:
170
+ DirectorMethodException(VALUE error)
171
+ : DirectorException(error)
172
+ {}
173
+
174
+ DirectorMethodException(const char *msg = "")
175
+ : DirectorException(rb_eRuntimeError, "SWIG director method error.", msg)
176
+ {}
177
+
178
+ static void raise(VALUE error)
179
+ {
180
+ throw DirectorMethodException(error);
181
+ }
182
+ };
183
+
184
+ /* Attempted to call a pure virtual method via a director method */
185
+ class WXRUBY_EXPORT DirectorPureVirtualException : public DirectorException
186
+ {
187
+ public:
188
+ DirectorPureVirtualException(const char *msg = "")
189
+ : DirectorException(rb_eRuntimeError, "SWIG director pure virtual method called", msg)
190
+ {}
191
+
192
+ static void raise(const char *msg)
193
+ {
194
+ throw DirectorPureVirtualException(msg);
195
+ }
196
+ };
197
+
198
+ /* Simple thread abstraction for pthreads on win32 */
199
+ #ifdef __THREAD__
200
+ # define __PTHREAD__
201
+ # if defined(_WIN32) || defined(__WIN32__)
202
+ # define pthread_mutex_lock EnterCriticalSection
203
+ # define pthread_mutex_unlock LeaveCriticalSection
204
+ # define pthread_mutex_t CRITICAL_SECTION
205
+ # define SWIG_MUTEX_INIT(var) var
206
+ # else
207
+ # include <pthread.h>
208
+ # define SWIG_MUTEX_INIT(var) var = PTHREAD_MUTEX_INITIALIZER
209
+ # endif
210
+ #endif
211
+
212
+ #ifdef __PTHREAD__
213
+ struct Guard
214
+ {
215
+ pthread_mutex_t *_mutex;
216
+
217
+ Guard(pthread_mutex_t &mutex) : _mutex(&mutex)
218
+ {
219
+ pthread_mutex_lock(_mutex);
220
+ }
221
+
222
+ ~Guard()
223
+ {
224
+ pthread_mutex_unlock(_mutex);
225
+ }
226
+ };
227
+ # define SWIG_GUARD(mutex) Guard _guard(mutex)
228
+ #else
229
+ # define SWIG_GUARD(mutex)
230
+ #endif
231
+
232
+ /* director base class */
233
+ class WXRUBY_EXPORT Director
234
+ {
235
+ private:
236
+ /* pointer to the wrapped Ruby object */
237
+ VALUE swig_self;
238
+ /* flag indicating whether the object is owned by Ruby or c++ */
239
+ mutable bool swig_disown_flag;
240
+
241
+ public:
242
+ /* wrap a Ruby object. */
243
+ Director(VALUE self);
244
+
245
+ /* discard our reference at destruction */
246
+ virtual ~Director();
247
+
248
+ /* return a pointer to the wrapped Ruby object */
249
+ VALUE swig_get_self() const
250
+ {
251
+ return swig_self;
252
+ }
253
+
254
+ /* acquire ownership of the wrapped Ruby object (the sense of "disown" is from Ruby) */
255
+ void swig_disown() const
256
+ {
257
+ if (!swig_disown_flag)
258
+ {
259
+ swig_disown_flag = true;
260
+ }
261
+ }
262
+
263
+ /* ownership management */
264
+ private:
265
+ typedef std::map<void *, GCItem_var> swig_ownership_map;
266
+ mutable swig_ownership_map swig_owner;
267
+ #ifdef __PTHREAD__
268
+ static pthread_mutex_t swig_mutex_own;
269
+ #endif
270
+
271
+ public:
272
+ template <typename Type>
273
+ void swig_acquire_ownership_array(Type *vptr) const
274
+ {
275
+ if (vptr)
276
+ {
277
+ SWIG_GUARD(swig_mutex_own);
278
+ swig_owner[vptr] = new GCArray_T<Type>(vptr);
279
+ }
280
+ }
281
+
282
+ template <typename Type>
283
+ void swig_acquire_ownership(Type *vptr) const
284
+ {
285
+ if (vptr)
286
+ {
287
+ SWIG_GUARD(swig_mutex_own);
288
+ swig_owner[vptr] = new GCItem_T<Type>(vptr);
289
+ }
290
+ }
291
+
292
+ void swig_acquire_ownership_obj(void *vptr, swig_ruby_owntype own) const;
293
+
294
+ swig_ruby_owntype swig_release_ownership(void *vptr) const;
295
+ };
296
+ }
@@ -0,0 +1,19 @@
1
+ /* -----------------------------------------------------------------------------
2
+ * Ruby API portion that goes into the runtime
3
+ *
4
+ * Customized for wxRuby3.
5
+ * Copyright (c) 2023 M.J.N. Corino, The Netherlands
6
+ *
7
+ * This software is released under the MIT license.
8
+ * ----------------------------------------------------------------------------- */
9
+
10
+ #ifdef __cplusplus
11
+ extern "C" {
12
+ #endif
13
+
14
+ WXRUBY_EXPORT VALUE
15
+ SWIG_Ruby_AppendOutput(VALUE target, VALUE o);
16
+
17
+ #ifdef __cplusplus
18
+ }
19
+ #endif
@@ -0,0 +1,45 @@
1
+ /* -----------------------------------------------------------------------------
2
+ * error manipulation
3
+ *
4
+ * Customized for wxRuby3.
5
+ * Copyright (c) 2023 M.J.N. Corino, The Netherlands
6
+ *
7
+ * This software is released under the MIT license.
8
+ * ----------------------------------------------------------------------------- */
9
+
10
+
11
+ /* Define some additional error types */
12
+ #define SWIG_ObjectPreviouslyDeletedError -100
13
+
14
+
15
+ /* Define custom exceptions for errors that do not map to existing Ruby
16
+ exceptions. Note this only works for C++ since a global cannot be
17
+ initialized by a function in C. For C, fallback to rb_eRuntimeError.*/
18
+
19
+ WXRUBY_EXPORT VALUE
20
+ getNullReferenceError(void);
21
+
22
+ WXRUBY_EXPORT VALUE
23
+ getObjectPreviouslyDeletedError(void);
24
+
25
+ WXRUBY_EXPORT VALUE
26
+ SWIG_Ruby_ErrorType(int SWIG_code);
27
+
28
+ /* This function is called when a user inputs a wrong argument to
29
+ a method.
30
+ */
31
+ WXRUBY_EXPORT
32
+ const char* Ruby_Format_TypeError( const char* msg,
33
+ const char* type,
34
+ const char* name,
35
+ const int argn,
36
+ VALUE input );
37
+
38
+ /* This function is called when an overloaded method fails */
39
+ WXRUBY_EXPORT
40
+ void Ruby_Format_OverloadedError(
41
+ const int argc,
42
+ const int maxargs,
43
+ const char* method,
44
+ const char* prototypes
45
+ );
@@ -0,0 +1,192 @@
1
+ /* -----------------------------------------------------------------------------
2
+ * rubyhead.swg
3
+ *
4
+ * Customized for wxRuby3.
5
+ * Copyright (c) 2023 M.J.N. Corino, The Netherlands
6
+ *
7
+ * This software is released under the MIT license.
8
+ * ----------------------------------------------------------------------------- */
9
+ #if __GNUC__ >= 7
10
+ #pragma GCC diagnostic push
11
+ #if defined(__cplusplus)
12
+ #pragma GCC diagnostic ignored "-Wregister"
13
+ #if __GNUC__ >= 10
14
+ #pragma GCC diagnostic ignored "-Wvolatile"
15
+ #if __GNUC__ >= 11
16
+ #pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion"
17
+ #endif
18
+ #endif
19
+ #endif
20
+ #endif
21
+
22
+ #include <ruby.h>
23
+ #include <ruby/version.h> /* For RUBY_API_VERSION_CODE */
24
+
25
+ #if __GNUC__ >= 7
26
+ #pragma GCC diagnostic pop
27
+ #endif
28
+
29
+ /* Ruby 1.9.1 has a "memoisation optimisation" when compiling with GCC which
30
+ * breaks using rb_intern as an lvalue, as SWIG does. We work around this
31
+ * issue for now by disabling this.
32
+ * https://sourceforge.net/tracker/?func=detail&aid=2859614&group_id=1645&atid=101645
33
+ */
34
+ #ifdef rb_intern
35
+ # undef rb_intern
36
+ #endif
37
+
38
+ /* Remove global macros defined in Ruby's win32.h */
39
+ #ifdef write
40
+ # undef write
41
+ #endif
42
+ #ifdef read
43
+ # undef read
44
+ #endif
45
+ #ifdef bind
46
+ # undef bind
47
+ #endif
48
+ #ifdef close
49
+ # undef close
50
+ #endif
51
+ #ifdef connect
52
+ # undef connect
53
+ #endif
54
+
55
+
56
+ /* Ruby 1.7 defines NUM2LL(), LL2NUM() and ULL2NUM() macros */
57
+ #ifndef NUM2LL
58
+ #define NUM2LL(x) NUM2LONG((x))
59
+ #endif
60
+ #ifndef LL2NUM
61
+ #define LL2NUM(x) INT2NUM((long) (x))
62
+ #endif
63
+ #ifndef ULL2NUM
64
+ #define ULL2NUM(x) UINT2NUM((unsigned long) (x))
65
+ #endif
66
+
67
+ /* Ruby 1.7 doesn't (yet) define NUM2ULL() */
68
+ #ifndef NUM2ULL
69
+ #ifdef HAVE_LONG_LONG
70
+ #define NUM2ULL(x) rb_num2ull((x))
71
+ #else
72
+ #define NUM2ULL(x) NUM2ULONG(x)
73
+ #endif
74
+ #endif
75
+
76
+ /* RSTRING_LEN, etc are new in Ruby 1.9, but ->ptr and ->len no longer work */
77
+ /* Define these for older versions so we can just write code the new way */
78
+ #ifndef RSTRING_LEN
79
+ # define RSTRING_LEN(x) RSTRING(x)->len
80
+ #endif
81
+ #ifndef RSTRING_PTR
82
+ # define RSTRING_PTR(x) RSTRING(x)->ptr
83
+ #endif
84
+ #ifndef RSTRING_END
85
+ # define RSTRING_END(x) (RSTRING_PTR(x) + RSTRING_LEN(x))
86
+ #endif
87
+ #ifndef RARRAY_LEN
88
+ # define RARRAY_LEN(x) RARRAY(x)->len
89
+ #endif
90
+ #ifndef RARRAY_PTR
91
+ # define RARRAY_PTR(x) RARRAY(x)->ptr
92
+ #endif
93
+ #ifndef RFLOAT_VALUE
94
+ # define RFLOAT_VALUE(x) RFLOAT(x)->value
95
+ #endif
96
+ #ifndef DOUBLE2NUM
97
+ # define DOUBLE2NUM(x) rb_float_new(x)
98
+ #endif
99
+ #ifndef RHASH_TBL
100
+ # define RHASH_TBL(x) (RHASH(x)->tbl)
101
+ #endif
102
+ #ifndef RHASH_ITER_LEV
103
+ # define RHASH_ITER_LEV(x) (RHASH(x)->iter_lev)
104
+ #endif
105
+ #ifndef RHASH_IFNONE
106
+ # define RHASH_IFNONE(x) (RHASH(x)->ifnone)
107
+ #endif
108
+ #ifndef RHASH_SIZE
109
+ # define RHASH_SIZE(x) (RHASH(x)->tbl->num_entries)
110
+ #endif
111
+ #ifndef RHASH_EMPTY_P
112
+ # define RHASH_EMPTY_P(x) (RHASH_SIZE(x) == 0)
113
+ #endif
114
+ #ifndef RSTRUCT_LEN
115
+ # define RSTRUCT_LEN(x) RSTRUCT(x)->len
116
+ #endif
117
+ #ifndef RSTRUCT_PTR
118
+ # define RSTRUCT_PTR(x) RSTRUCT(x)->ptr
119
+ #endif
120
+ #ifndef RTYPEDDATA_P
121
+ # define RTYPEDDATA_P(x) (TYPE(x) != T_DATA)
122
+ #endif
123
+
124
+
125
+
126
+ /*
127
+ * The following macros are used for providing the correct type of a
128
+ * function pointer to the Ruby C API.
129
+ *
130
+ * Starting with Ruby 2.7 these macros act transparently due to Ruby's moving
131
+ * moving away from ANYARGS and instead employing strict function signatures.
132
+ *
133
+ * Note: In case of C (not C++) the macros are transparent even before
134
+ * Ruby 2.7 due to the fact that the Ruby C API used function declarators
135
+ * with empty parentheses, which allows for an unspecified number of
136
+ * arguments.
137
+ *
138
+ * PROTECTFUNC(f) is used for the function pointer argument of the Ruby
139
+ * C API function rb_protect().
140
+ *
141
+ * VALUEFUNC(f) is used for the function pointer argument(s) of Ruby C API
142
+ * functions like rb_define_method() and rb_define_singleton_method().
143
+ *
144
+ * VOIDFUNC(f) is used to typecast a C function that implements either
145
+ * the "mark" or "free" stuff for a Ruby Data object, so that it can be
146
+ * passed as an argument to Ruby C API functions like Data_Wrap_Struct()
147
+ * and Data_Make_Struct().
148
+ *
149
+ * SWIG_RUBY_VOID_ANYARGS_FUNC(f) is used for the function pointer
150
+ * argument(s) of Ruby C API functions like rb_define_virtual_variable().
151
+ *
152
+ * SWIG_RUBY_INT_ANYARGS_FUNC(f) is used for the function pointer
153
+ * argument(s) of Ruby C API functions like st_foreach().
154
+ */
155
+ #if defined(__cplusplus) && RUBY_API_VERSION_CODE < 20700
156
+ # define PROTECTFUNC(f) ((VALUE (*)(VALUE)) f)
157
+ # define VALUEFUNC(f) ((VALUE (*)(ANYARGS)) f)
158
+ # define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
159
+ # define SWIG_RUBY_VOID_ANYARGS_FUNC(f) ((void (*)(ANYARGS))(f))
160
+ # define SWIG_RUBY_INT_ANYARGS_FUNC(f) ((int (*)(ANYARGS))(f))
161
+ #else
162
+ # define PROTECTFUNC(f) (f)
163
+ # define VALUEFUNC(f) (f)
164
+ # define VOIDFUNC(f) (f)
165
+ # define SWIG_RUBY_VOID_ANYARGS_FUNC(f) (f)
166
+ # define SWIG_RUBY_INT_ANYARGS_FUNC(f) (f)
167
+ #endif
168
+
169
+ /* Don't use for expressions have side effect */
170
+ #ifndef RB_STRING_VALUE
171
+ #define RB_STRING_VALUE(s) (TYPE(s) == T_STRING ? (s) : (*(volatile VALUE *)&(s) = rb_str_to_str(s)))
172
+ #endif
173
+ #ifndef StringValue
174
+ #define StringValue(s) RB_STRING_VALUE(s)
175
+ #endif
176
+ #ifndef StringValuePtr
177
+ #define StringValuePtr(s) RSTRING_PTR(RB_STRING_VALUE(s))
178
+ #endif
179
+ #ifndef StringValueLen
180
+ #define StringValueLen(s) RSTRING_LEN(RB_STRING_VALUE(s))
181
+ #endif
182
+ #ifndef SafeStringValue
183
+ #define SafeStringValue(v) do {\
184
+ StringValue(v);\
185
+ rb_check_safe_str(v);\
186
+ } while (0)
187
+ #endif
188
+
189
+ #ifndef HAVE_RB_DEFINE_ALLOC_FUNC
190
+ #define rb_define_alloc_func(klass, func) rb_define_singleton_method((klass), "new", VALUEFUNC((func)), -1)
191
+ #define rb_undef_alloc_func(klass) rb_undef_method(CLASS_OF((klass)), "new")
192
+ #endif