put in integer fixes

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11059 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Joseph Wang 2009-01-12 08:57:16 +00:00
commit 809bbb89e3
3 changed files with 77 additions and 11 deletions

View file

@ -1,6 +1,9 @@
Version 1.3.37 (30 December 2008)
=================================
2009-01-12: drjoe
Fixed handling of integer arrays
2009-01-10: drjoe
Fix integer handling in r to deal correctly with signed
and unsigned issues

View file

@ -56,13 +56,61 @@ SWIG_InitializeModule(0);
%typemap(out) void "";
%typemap(in) int *, int[ANY],
long *, long[ANY] %{
$1 = INTEGER($input);
signed int *, signed int[ANY],
unsigned int *, unsigned int[ANY],
short *, short[ANY],
signed short *, signed short[ANY],
unsigned short *, unsigned short[ANY],
long *, long[ANY],
signed long *, signed long[ANY],
unsigned long *, unsigned long[ANY],
long long *, long long[ANY],
signed long long *, signed long long[ANY],
unsigned long long *, unsigned long long[ANY]
{
{ int _rswigi;
int _rswiglen = LENGTH($input);
$1 = %static_cast(calloc(sizeof($1_basetype), _rswiglen), $1_ltype);
for (_rswigi=0; _rswigi< _rswiglen; _rswigi++) {
$1[_rswigi] = INTEGER($input)[_rswigi];
}
}
}
%typemap(in) float *, float[ANY],
double *, double[ANY]
{
{ int _rswigi;
int _rswiglen = LENGTH($input);
$1 = %static_cast(calloc(sizeof($1_basetype), _rswiglen), $1_ltype);
for (_rswigi=0; _rswigi<_rswiglen; _rswigi++) {
$1[_rswigi] = REAL($input)[_rswigi];
}
}
}
%typemap(freearg,noblock=1) int *, int[ANY],
signed int *, signed int[ANY],
unsigned int *, unsigned int[ANY],
short *, short[ANY],
signed short *, signed short[ANY],
unsigned short *, unsigned short[ANY],
long *, long[ANY],
signed long *, signed long[ANY],
unsigned long *, unsigned long[ANY],
long long *, long long[ANY],
signed long long *, signed long long[ANY],
unsigned long long *, unsigned long long[ANY],
float *, float[ANY],
double *, double[ANY]
%{
free($1);
%}
%typemap(in) double *, double[ANY] %{
$1 = REAL($input);
%}
/* Shoul dwe recycle to make the length correct.
And warn if length() > the dimension.
@ -92,8 +140,6 @@ SWIG_InitializeModule(0);
%include <typemaps/swigtypemaps.swg>
%include <rtype.swg>
%apply int[ANY] { enum SWIGTYPE[ANY] };
%typemap(in,noblock=1) enum SWIGTYPE[ANY] {
$1 = %reinterpret_cast(INTEGER($input), $1_ltype);
}

View file

@ -3,7 +3,7 @@
for use in class representations.
*/
%typemap("rtype") int, int *, int & "numeric";
%typemap("rtype") int, int *, int & "integer";
%apply int {size_t}
%apply int {std::size_t}
%apply int {ptrdiff_t}
@ -13,11 +13,11 @@
%apply int {short}
%apply int {unsigned short}
%typemap("rtype") long, long *, long & "numeric";
%typemap("rtype") long, long *, long & "integer";
%apply long {long long}
%apply long {signed long long}
%apply long {unsigned long long}
%apply long {unsigned long}
%apply long {signed long}
%apply long {unsigned long}
%typemap("rtype") double, double*, double & "numeric";
@ -143,7 +143,24 @@ string &, std::string &
std::string,
string &,
std::string &,
void
void,
signed int,
signed int &,
unsigned int,
unsigned int &,
short,
short &,
unsigned short,
unsigned short &,
long long,
signed long long,
signed long long &,
unsigned long long,
unsigned long long &,
signed long,
signed long &,
unsigned long,
unsigned long &
%{ %}