diff options
author | Logan Johnson <ljohnson@users.sourceforge.net> | 2003-06-04 23:36:13 +0000 |
---|---|---|
committer | Logan Johnson <ljohnson@users.sourceforge.net> | 2003-06-04 23:36:13 +0000 |
commit | 0081cb26ef1013af2f8e2e679344e77a6cd571cb (patch) | |
tree | eb35effd1bef626765e09269dd531f89984e7320 /Lib | |
parent | 22d7c12c26e32dc7a206b89579f561c5fc402af2 (diff) | |
download | swig-0081cb26ef1013af2f8e2e679344e77a6cd571cb.tar.gz |
*** empty log message ***
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4863 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/ruby/ruby.swg | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/Lib/ruby/ruby.swg b/Lib/ruby/ruby.swg index a1716fb44..fe4728523 100644 --- a/Lib/ruby/ruby.swg +++ b/Lib/ruby/ruby.swg @@ -385,6 +385,100 @@ %typemap(constant) SWIGTYPE (CLASS::*) "rb_define_const($module, \"$symname\", SWIG_NewPackedObj((void *) &$1, sizeof($type), $1_descriptor));"; +/***************************************************************************** + * + * Inverse argument typemaps are for marshaling C/C++ parameters to call Python + * methods from C++ proxy wrapper classes. + * + *****************************************************************************/ + +/* --- Inverse arguments --- */ + +/* Primitive datatypes */ + +%typemap(inv) int "$input = INT2NUM($1);"; +%typemap(inv) short "$input = INT2NUM($1);"; +%typemap(inv) long "$input = LONG2NUM($1);"; +%typemap(inv) signed char "$input = INT2NUM($1);"; +%typemap(inv) float "$input = rb_float_new($1);"; +%typemap(inv) double "$input = rb_float_new($1);"; +%typemap(inv) char* "$input = rb_str_new2($1);"; +%typemap(inv) bool "$input = $1 ? Qtrue : Qfalse;"; + +%typemap(inv) unsigned int "$input = UINT2NUM($1);"; +%typemap(inv) unsigned short "$input = UINT2NUM($1);"; +%typemap(inv) unsigned long "$input = ULONG2NUM($1);"; +%typemap(inv) unsigned char "$input = UINT2NUM($1);"; + +%typemap(inv) VALUE "$input = $1;"; + +/* +%typemap(inv, parse="s") SWIGTYPE { +{ + $&1_ltype resultptr; + resultptr = new $1_ltype(($1_ltype &) $1); + $result = SWIG_NewPointerObj((void *) resultptr, $&1_descriptor, 1); +} +} +*/ + +/* no can do... see python.cxx +%typemap(inv) DIRECTORTYPE * { + { + __DIRECTOR__$1_ltype proxy = dynamic_cast<__DIRECTOR__$1_ltype>($1_name); + if (!proxy) { + $input = SWIG_NewPointerObj((void *) $1_name, $1_descriptor, 0); + } else { + $input = proxy->__get_self(); + } + assert($input); + } +} +%typemap(inv) SWIGTYPE * { + $input = SWIG_NewPointerObj((void *) $1_name, $1_descriptor, 0); +} +*/ + +/* +%typemap(inv, parse="s") void "0"; +*/ +/* +%typemap(inv) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] { + $input = SWIG_NewPointerObj((void *) $1_name, $1_descriptor, $owner); +} +*/ + + +/* --- Outverse arguments --- */ + +%define OUTV_TYPEMAP(type, converter) +%typemap(argoutv) type *OUTV "*$result = (type) converter($input);"; +%typemap(outv) type "$result = (type) converter($input);"; +%typemap(outv) type &OUTV = type +%enddef + +OUTV_TYPEMAP(char, NUM2INT); +OUTV_TYPEMAP(unsigned char, NUM2UINT); +OUTV_TYPEMAP(short, NUM2INT); +OUTV_TYPEMAP(unsigned short, NUM2INT); +OUTV_TYPEMAP(int, NUM2INT); +OUTV_TYPEMAP(unsigned int, NUM2INT); +OUTV_TYPEMAP(long, NUM2INT); +OUTV_TYPEMAP(unsigned long, NUM2INT); +OUTV_TYPEMAP(long long, NUM2INT); +OUTV_TYPEMAP(unsigned long long, NUM2INT); +OUTV_TYPEMAP(float, NUM2DBL); +OUTV_TYPEMAP(double, NUM2DBL); +OUTV_TYPEMAP(bool, RTEST); + + +%typemap(outv) SWIGTYPE *, + SWIGTYPE &, + SWIGTYPE [] + "if ((SWIG_ConvertPtr($input,(void **) &$result, $descriptor,SWIG_POINTER_EXCEPTION | $disown )) == -1) throw SWIG_DIRECTOR_TYPE_MISMATCH(\"Pointer conversion failed.\");"; + +%typemap(outv) void * "if ((SWIG_ConvertPtr($input,(void **) &$result, 0, SWIG_POINTER_EXCEPTION | $disown )) == -1) throw SWIG_DIRECTOR_TYPE_MISMATCH(\"Pointer conversion failed.\");"; + /* --------------------------------------------------------------------- * typedef & typemaps for VALUE (passed through unmodified and unchecked) * --------------------------------------------------------------------- */ |