From: Soeren S. <swi...@nn...> - 2009-03-25 07:12:48
|
Dear all, I recognized that typemaps are not applied when I am using templated classes *and* non standard types (like int32_t instead of int even though int32_t is typedef'd as int). I am putting a toy example to reproduce the problem with current swig below. If I exchange int32_t with int in the example.i file below, typemaps get applied nicely. Similarly the addition apply %apply (int32_t** ARGOUT2, int32_t* DIM1, int32_t* DIM2) {(int** ARGOUT2, int32_t* DIM1, int32_t* DIM2)}; fixes the problem. So I suspect a type reduction bug. Note that this happened with swig python and swig octave and I did never observe this without templated classes. Any ideas? Soeren - example.i: %module example %{ #include <stdint.h> %typemap(in, numinputs=1) (int32_t** ARGOUT2, int32_t* DIM1, int32_t* DIM2) { } %typemap(argout) (int32_t** ARGOUT2, int32_t* DIM1, int32_t* DIM2) { } %include "example.h" %template(Foo) CFoo<int32_t>; - example.h: #include <stdint.h> template <class ST> class CFoo { public: CFoo(ST x) { content=x; } void get_fm(ST** ARGOUT2, int32_t* DIM1, int32_t* DIM2, int x) { } ST content; }; |
From: William S F. <ws...@fu...> - 2009-03-27 07:06:31
|
Soeren Sonnenburg wrote: > Dear all, > > I recognized that typemaps are not applied when I am using templated > classes *and* non standard types (like int32_t instead of int even > though int32_t is typedef'd as int). > > I am putting a toy example to reproduce the problem with current swig > below. If I exchange int32_t with int in the example.i file below, > typemaps get applied nicely. Similarly the addition apply > > %apply (int32_t** ARGOUT2, int32_t* DIM1, int32_t* DIM2) {(int** > ARGOUT2, int32_t* DIM1, int32_t* DIM2)}; > > fixes the problem. > > So I suspect a type reduction bug. Note that this happened with swig > python and swig octave and I did never observe this without templated > classes. > > Any ideas? > Soeren > > - example.i: > > %module example > %{ > #include <stdint.h> > > %typemap(in, numinputs=1) (int32_t** ARGOUT2, int32_t* DIM1, int32_t* DIM2) > { > } > > %typemap(argout) (int32_t** ARGOUT2, int32_t* DIM1, int32_t* DIM2) > { > } > > %include "example.h" > > %template(Foo) CFoo<int32_t>; > > > > > - example.h: > > #include <stdint.h> > > template <class ST> class CFoo > { > public: > CFoo(ST x) > { > content=x; > } > > void get_fm(ST** ARGOUT2, int32_t* DIM1, int32_t* DIM2, int x) > { > } > > ST content; > }; > Your interface file was buggy. With the corrections and modifications below it works fine for me on Ubuntu and swig-1.3.39 - Octave, Python and C#. Can you check again and give details of your system if it still occurs? %module example %{ #include <stdint.h> #include "example.h" // added by WSF %} // added by WSF %typemap(in, numinputs=1) (int32_t** ARGOUT2, int32_t* DIM1, int32_t* DIM2) { /* in typemap */ } %typemap(argout) (int32_t** ARGOUT2, int32_t* DIM1, int32_t* DIM2) { /* argout typemap */ } %include "example.h" %template(Foo) CFoo<int32_t>; William |