summaryrefslogtreecommitdiff
path: root/Examples/test-suite/wrapmacro.i
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/wrapmacro.i')
-rw-r--r--Examples/test-suite/wrapmacro.i62
1 files changed, 62 insertions, 0 deletions
diff --git a/Examples/test-suite/wrapmacro.i b/Examples/test-suite/wrapmacro.i
new file mode 100644
index 0000000..bd5e48b
--- /dev/null
+++ b/Examples/test-suite/wrapmacro.i
@@ -0,0 +1,62 @@
+%module wrapmacro
+
+#ifdef SWIGLUA // lua only has one numeric type, so some overloads shadow each other creating warnings
+%warnfilter(SWIGWARN_LANG_OVERLOAD_SHADOW) SWIGMACRO_max;
+#endif
+
+/* Testing technique for wrapping macros */
+
+%{
+#ifdef max
+#undef max
+#endif
+%}
+
+/* Here, some macros to wrap */
+%inline %{
+
+typedef unsigned short guint16;
+
+#define GUINT16_SWAP_LE_BE_CONSTANT(val) ((guint16) ( \
+ (guint16) ((guint16) (val) >> 8) | \
+ (guint16) ((guint16) (val) << 8)))
+
+/* Don't use max(), it's a builtin function for PHP. */
+#define maximum(a,b) ((a) > (b) ? (a) : (b))
+
+%}
+
+
+/* Here, the auxiliary macro to wrap a macro */
+%define %wrapmacro(type, name, lparams, lnames)
+%rename(name) SWIGMACRO_##name;
+%inline %{
+type SWIGMACRO_##name(lparams) {
+ return name(lnames);
+}
+%}
+%enddef
+#define PLIST(...) __VA_ARGS__
+
+
+
+/* Here, wrapping the macros */
+%wrapmacro(guint16, GUINT16_SWAP_LE_BE_CONSTANT, guint16 val, val);
+%wrapmacro(size_t, maximum, PLIST(size_t a, const size_t& b), PLIST(a, b));
+%wrapmacro(double, maximum, PLIST(double a, double b), PLIST(a, b));
+
+
+/* Maybe in the future, a swig directive will make this easier:
+
+#define max(a,b) ((a) > (b) ? (a) : (b))
+
+%wrapmacro double max(long a, double b); // target name is 'max'
+%wrapmacro(max_i) int max(int a, int b); // changes target name to 'max_i'.
+
+*/
+
+%{
+#ifdef max
+#undef max
+#endif
+%}