From: David F. <dav...@in...> - 2014-02-04 11:38:34
|
Hi, Seems from the comment in your code that you're alread using NumPy. NumPy provides typemaps to convert C array to NumPy array back and forth. http://docs.scipy.org/doc/numpy/reference/swig.interface-file.html There is no typemap for array that are returned function value, but you could %inline an helper function: void get_rand_list_helper(int length, double* array); that will call get_rand_list and then wrap this helper function using ARGOUT_ARRAY1 typemap. The original function can be %ignore 'd (no wrapping generated for it), and the helper function can be %rename 'd to the original name. Hope it helps! David Quoting Will Boyd (2014-02-04 00:33:02) > Hello, > > I am trying to write a piece of code in C++ which can produce an array and > return it as as a Python list. I understand that I can return the > > The stripped down C++ routine is below: > > /* File get_rand_list.cpp */ > #include "get_rand_list.h" > > /* Define function implementation */ > double* get_rand_list(int length) { > > output_list = new double[length]; > > /* Populate input NumPy array with random numbers */ > for (int i=0; i < length; i++) > output_list[i] = ((double) rand()) / RAND_MAX; > > return output_list; > } > > I would like to be able to use this in Python as so: > > from get_rand_list import * > list = get_rand_list(10) > > How can I use SWIG typemaps to wrap the C++ routine to do this? If there is a > simpler way which requires some small modifications to the C++ routine that is > most likely fine. > > Thanks for your help, > > -- > Will Boyd > Nuclear Science & Engineering > Massachusetts Institute of Technology > Email: wb...@mi... > Cell: 423.413.8469 -- David Froger SED-PRO "La simplicité est la sophistication suprême." -- Léonard de Vinci |
From: Will B. <wboyd@MIT.EDU> - 2014-02-06 01:25:14
|
Thanks David! Actually, it looks like I accidentally cut out the portion of my email which said that I know that I can use the numpy.i typemaps for this. But unfortunately, NumPy is not available on some of the HPC clusters that I am using. So a purely SWIG typemap for C-array-to-Python-list conversion would be preferable. Any alternative ideas for how to do this? On Tue, Feb 4, 2014 at 6:03 AM, David Froger <dav...@in...> wrote: > Hi, > > Seems from the comment in your code that you're alread using NumPy. NumPy > provides typemaps to convert C array to NumPy array back and forth. > > http://docs.scipy.org/doc/numpy/reference/swig.interface-file.html > > There is no typemap for array that are returned function value, but you > could > %inline an helper function: > > void get_rand_list_helper(int length, double* array); > > that will call get_rand_list and then wrap this helper function using > ARGOUT_ARRAY1 typemap. > > The original function can be %ignore 'd (no wrapping generated for it), and > the helper function can be %rename 'd to the original name. > > Hope it helps! > David > > Quoting Will Boyd (2014-02-04 00:33:02) > > Hello, > > > > I am trying to write a piece of code in C++ which can produce an array > and > > return it as as a Python list. I understand that I can return the > > > > The stripped down C++ routine is below: > > > > /* File get_rand_list.cpp */ > > #include "get_rand_list.h" > > > > /* Define function implementation */ > > double* get_rand_list(int length) { > > > > output_list = new double[length]; > > > > /* Populate input NumPy array with random numbers */ > > for (int i=0; i < length; i++) > > output_list[i] = ((double) rand()) / RAND_MAX; > > > > return output_list; > > } > > > > I would like to be able to use this in Python as so: > > > > from get_rand_list import * > > list = get_rand_list(10) > > > > How can I use SWIG typemaps to wrap the C++ routine to do this? If there > is a > > simpler way which requires some small modifications to the C++ routine > that is > > most likely fine. > > > > Thanks for your help, > > > > -- > > Will Boyd > > Nuclear Science & Engineering > > Massachusetts Institute of Technology > > Email: wb...@mi... > > Cell: 423.413.8469 > > -- > David Froger > SED-PRO > "La simplicité est la sophistication suprême." > -- Léonard de Vinci > -- Will Boyd Nuclear Science & Engineering Massachusetts Institute of Technology Email: wb...@mi... Cell: 423.413.8469 |
From: Andy S. <and...@gm...> - 2014-02-06 01:39:18
|
Just do a user install of numpy. On our clusters , I use the system python (2.7) and build and install all the libs in the user dir into $HOME/.local On Wednesday, February 5, 2014, Will Boyd <wb...@mi...> wrote: > Thanks David! Actually, it looks like I accidentally cut out the portion > of my email which said that I know that I can use the numpy.i typemaps for > this. But unfortunately, NumPy is not available on some of the HPC clusters > that I am using. So a purely SWIG typemap for C-array-to-Python-list > conversion would be preferable. Any alternative ideas for how to do this? > > > On Tue, Feb 4, 2014 at 6:03 AM, David Froger <dav...@in...<javascript:_e(%7B%7D,'cvml','dav...@in...');> > > wrote: > >> Hi, >> >> Seems from the comment in your code that you're alread using NumPy. NumPy >> provides typemaps to convert C array to NumPy array back and forth. >> >> http://docs.scipy.org/doc/numpy/reference/swig.interface-file.html >> >> There is no typemap for array that are returned function value, but you >> could >> %inline an helper function: >> >> void get_rand_list_helper(int length, double* array); >> >> that will call get_rand_list and then wrap this helper function using >> ARGOUT_ARRAY1 typemap. >> >> The original function can be %ignore 'd (no wrapping generated for it), >> and >> the helper function can be %rename 'd to the original name. >> >> Hope it helps! >> David >> >> Quoting Will Boyd (2014-02-04 00:33:02) >> > Hello, >> > >> > I am trying to write a piece of code in C++ which can produce an array >> and >> > return it as as a Python list. I understand that I can return the >> > >> > The stripped down C++ routine is below: >> > >> > /* File get_rand_list.cpp */ >> > #include "get_rand_list.h" >> > >> > /* Define function implementation */ >> > double* get_rand_list(int length) { >> > >> > output_list = new double[length]; >> > >> > /* Populate input NumPy array with random numbers */ >> > for (int i=0; i < length; i++) >> > output_list[i] = ((double) rand()) / RAND_MAX; >> > >> > return output_list; >> > } >> > >> > I would like to be able to use this in Python as so: >> > >> > from get_rand_list import * >> > list = get_rand_list(10) >> > >> > How can I use SWIG typemaps to wrap the C++ routine to do this? If >> there is a >> > simpler way which requires some small modifications to the C++ routine >> that is >> > most likely fine. >> > >> > Thanks for your help, >> > >> > -- >> > Will Boyd >> > Nuclear Science & Engineering >> > Massachusetts Institute of Technology >> > Email: wb...@mi... <javascript:_e(%7B%7D,'cvml','wb...@mi...');> >> > Cell: 423.413.8469 >> >> -- >> David Froger >> SED-PRO >> "La simplicité est la sophistication suprême." >> -- Léonard de Vinci >> > > > > -- > Will Boyd > Nuclear Science & Engineering > Massachusetts Institute of Technology > Email: wb...@mi... <javascript:_e(%7B%7D,'cvml','wb...@mi...');> > Cell: 423.413.8469 > |
From: Will B. <wboyd@MIT.EDU> - 2014-02-06 01:39:24
|
On a machine like IBM BG/Q a user install of NumPy is a non-trivial feat. On Wed, Feb 5, 2014 at 8:33 PM, Andy Somogyi <and...@gm...> wrote: > Just do a user install of numpy. On our clusters , I use the system python > (2.7) and build and install all the libs in the user dir into $HOME/.local > > > On Wednesday, February 5, 2014, Will Boyd <wb...@mi...> wrote: > >> Thanks David! Actually, it looks like I accidentally cut out the portion >> of my email which said that I know that I can use the numpy.i typemaps for >> this. But unfortunately, NumPy is not available on some of the HPC clusters >> that I am using. So a purely SWIG typemap for C-array-to-Python-list >> conversion would be preferable. Any alternative ideas for how to do this? >> >> >> On Tue, Feb 4, 2014 at 6:03 AM, David Froger <dav...@in...>wrote: >> >>> Hi, >>> >>> Seems from the comment in your code that you're alread using NumPy. NumPy >>> provides typemaps to convert C array to NumPy array back and forth. >>> >>> http://docs.scipy.org/doc/numpy/reference/swig.interface-file.html >>> >>> There is no typemap for array that are returned function value, but you >>> could >>> %inline an helper function: >>> >>> void get_rand_list_helper(int length, double* array); >>> >>> that will call get_rand_list and then wrap this helper function using >>> ARGOUT_ARRAY1 typemap. >>> >>> The original function can be %ignore 'd (no wrapping generated for it), >>> and >>> the helper function can be %rename 'd to the original name. >>> >>> Hope it helps! >>> David >>> >>> Quoting Will Boyd (2014-02-04 00:33:02) >>> > Hello, >>> > >>> > I am trying to write a piece of code in C++ which can produce an array >>> and >>> > return it as as a Python list. I understand that I can return the >>> > >>> > The stripped down C++ routine is below: >>> > >>> > /* File get_rand_list.cpp */ >>> > #include "get_rand_list.h" >>> > >>> > /* Define function implementation */ >>> > double* get_rand_list(int length) { >>> > >>> > output_list = new double[length]; >>> > >>> > /* Populate input NumPy array with random numbers */ >>> > for (int i=0; i < length; i++) >>> > output_list[i] = ((double) rand()) / RAND_MAX; >>> > >>> > return output_list; >>> > } >>> > >>> > I would like to be able to use this in Python as so: >>> > >>> > from get_rand_list import * >>> > list = get_rand_list(10) >>> > >>> > How can I use SWIG typemaps to wrap the C++ routine to do this? If >>> there is a >>> > simpler way which requires some small modifications to the C++ routine >>> that is >>> > most likely fine. >>> > >>> > Thanks for your help, >>> > >>> > -- >>> > Will Boyd >>> > Nuclear Science & Engineering >>> > Massachusetts Institute of Technology >>> > Email: wb...@mi... >>> > Cell: 423.413.8469 >>> >>> -- >>> David Froger >>> SED-PRO >>> "La simplicité est la sophistication suprême." >>> -- Léonard de Vinci >>> >> >> >> >> -- >> Will Boyd >> Nuclear Science & Engineering >> Massachusetts Institute of Technology >> Email: wb...@mi... >> Cell: 423.413.8469 >> > -- Will Boyd Nuclear Science & Engineering Massachusetts Institute of Technology Email: wb...@mi... Cell: 423.413.8469 |
From: Ian <ia...@ay...> - 2014-02-06 22:24:33
|
Since you are writing C++ (and it is 2014!), why not return a vector<double> and use the std_vector.i typemap? Using a raw array means you have to worry about ensuring the array you have allocated gets deleted properly. Also it is not obvious how you would make the length known to your typemap. On 03/02/2014 23:33, Will Boyd wrote: > Hello, > > I am trying to write a piece of code in C++ which can produce an array > and return it as as a Python list. I understand that I can return the > > The stripped down C++ routine is below: > > /* File get_rand_list.cpp */ > #include "get_rand_list.h" > > /* Define function implementation */ > double* get_rand_list(int length) { > > output_list = new double[length]; > > /* Populate input NumPy array with random numbers */ > for (int i=0; i < length; i++) > output_list[i] = ((double) rand()) / RAND_MAX; > > return output_list; > } > > I would like to be able to use this in Python as so: > > from get_rand_list import * > list = get_rand_list(10) > > How can I use SWIG typemaps to wrap the C++ routine to do this? If > there is a simpler way which requires some small modifications to the > C++ routine that is most likely fine. > > Thanks for your help, > > -- > Will Boyd > Nuclear Science & Engineering > Massachusetts Institute of Technology > Email: wb...@mi... <mailto:wb...@mi...> > Cell: 423.413.8469 > > > ------------------------------------------------------------------------------ > Managing the Performance of Cloud-Based Applications > Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. > Read the Whitepaper. > http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk > > > _______________________________________________ > Swig-user mailing list > Swi...@li... > https://lists.sourceforge.net/lists/listinfo/swig-user |
From: Denis M. <da...@in...> - 2014-10-24 09:14:58
|
Good day, I want to use library functions libvmmapi.so in FreeBSD (FreeBSD vmserver 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014 ro...@sn...:/usr/obj/usr/src/sys/GENERIC amd64). There is source code library (a list of files-Makefile vmmapi.h vmmapi.c vmmapi_freebsd.c) my actions: user# swig3.0 -module libvmmapi -perl5 vmmapi.h user# ls Makefile vmmapi.h libvmmapi.pm vmmapi_freebsd.c vmmapi.c vmmapi_wrap.c user# make user# ls Makefile vmmapi.o libvmmapi.a vmmapi.po libvmmapi.pm vmmapi_freebsd.c libvmmapi_p.a vmmapi_freebsd.o vmmapi.c vmmapi_freebsd.po vmmapi.h vmmapi_wrap.c user# clang -fPIC -c vmmapi_wrap.c -I/usr/local/lib/perl5/5.16/mach/CORE -Dbool=char vmmapi_wrap.c:1873:19: warning: implicit declaration of function 'vm_create' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_create((char const *)arg1); ^ vmmapi_wrap.c:1902:30: warning: implicit declaration of function 'vm_open' is invalid in C99 [-Wimplicit-function-declaration] result = (struct vmctx *)vm_open((char const *)arg1); ^ vmmapi_wrap.c:1902:14: warning: cast to 'struct vmctx *' from smaller integer type 'int' [-Wint-to-pointer-cast] result = (struct vmctx *)vm_open((char const *)arg1); ^ vmmapi_wrap.c:1929:5: warning: implicit declaration of function 'vm_destroy' is invalid in C99 [-Wimplicit-function-declaration] vm_destroy(arg1); ^ vmmapi_wrap.c:1966:19: warning: implicit declaration of function 'vm_parse_memsize' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_parse_memsize((char const *)arg1,arg2); ^ vmmapi_wrap.c:2026:19: warning: implicit declaration of function 'vm_get_memory_seg' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_get_memory_seg(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:2045:24: error: variable has incomplete type 'enum vm_mmap_style' enum vm_mmap_style arg3 ; ^ vmmapi_wrap.c:2045:10: note: forward declaration of 'enum vm_mmap_style' enum vm_mmap_style arg3 ; ^ vmmapi_wrap.c:2073:12: error: cast to incomplete type 'enum vm_mmap_style' arg3 = (enum vm_mmap_style)(val3); ^ vmmapi_wrap.c:2045:10: note: forward declaration of 'enum vm_mmap_style' enum vm_mmap_style arg3 ; ^ vmmapi_wrap.c:2074:19: warning: implicit declaration of function 'vm_setup_memory' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_setup_memory(arg1,arg2,arg3); ^ vmmapi_wrap.c:2128:22: warning: implicit declaration of function 'vm_map_gpa' is invalid in C99 [-Wimplicit-function-declaration] result = (void *)vm_map_gpa(arg1,arg2,arg3); ^ vmmapi_wrap.c:2128:14: warning: cast to 'void *' from smaller integer type 'int' [-Wint-to-pointer-cast] result = (void *)vm_map_gpa(arg1,arg2,arg3); ^ vmmapi_wrap.c:2188:19: warning: implicit declaration of function 'vm_get_gpa_pmap' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_get_gpa_pmap(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:2220:14: warning: implicit declaration of function 'vm_get_lowmem_limit' is invalid in C99 [-Wimplicit-function-declaration] result = vm_get_lowmem_limit(arg1); ^ vmmapi_wrap.c:2261:5: warning: implicit declaration of function 'vm_set_lowmem_limit' is invalid in C99 [-Wimplicit-function-declaration] vm_set_lowmem_limit(arg1,arg2); ^ vmmapi_wrap.c:2347:19: warning: implicit declaration of function 'vm_set_desc' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_set_desc(arg1,arg2,arg3,arg4,arg5,arg6); ^ vmmapi_wrap.c:2419:19: warning: implicit declaration of function 'vm_get_desc' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_get_desc(arg1,arg2,arg3,arg4,arg5,arg6); ^ vmmapi_wrap.c:2487:19: warning: implicit declaration of function 'vm_set_register' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_set_register(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:2543:19: warning: implicit declaration of function 'vm_get_register' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_get_register(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:2607:19: warning: implicit declaration of function 'vm_run' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_run(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:2647:19: warning: implicit declaration of function 'vm_apicid2vcpu' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_apicid2vcpu(arg1,arg2); ^ vmmapi_wrap.c:2664:24: error: variable has incomplete type 'enum vm_event_type' enum vm_event_type arg3 ; ^ vmmapi_wrap.c:2664:10: note: forward declaration of 'enum vm_event_type' enum vm_event_type arg3 ; ^ vmmapi_wrap.c:2695:12: error: cast to incomplete type 'enum vm_event_type' arg3 = (enum vm_event_type)(val3); ^ vmmapi_wrap.c:2664:10: note: forward declaration of 'enum vm_event_type' enum vm_event_type arg3 ; ^ vmmapi_wrap.c:2701:19: warning: implicit declaration of function 'vm_inject_event' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_inject_event(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:2722:24: error: variable has incomplete type 'enum vm_event_type' enum vm_event_type arg3 ; ^ vmmapi_wrap.c:2722:10: note: forward declaration of 'enum vm_event_type' enum vm_event_type arg3 ; ^ vmmapi_wrap.c:2756:12: error: cast to incomplete type 'enum vm_event_type' arg3 = (enum vm_event_type)(val3); ^ vmmapi_wrap.c:2722:10: note: forward declaration of 'enum vm_event_type' enum vm_event_type arg3 ; ^ vmmapi_wrap.c:2767:19: warning: implicit declaration of function 'vm_inject_event2' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_inject_event2(arg1,arg2,arg3,arg4,arg5); ^ vmmapi_wrap.c:2819:19: warning: implicit declaration of function 'vm_lapic_irq' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_lapic_irq(arg1,arg2,arg3); ^ vmmapi_wrap.c:2859:19: warning: implicit declaration of function 'vm_inject_nmi' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_inject_nmi(arg1,arg2); ^ vmmapi_wrap.c:2890:19: warning: implicit declaration of function 'vm_capability_name2type' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_capability_name2type((char cons... ^ vmmapi_wrap.c:2918:22: warning: implicit declaration of function 'vm_capability_type2name' is invalid in C99 [-Wimplicit-function-declaration] result = (char *)vm_capability_type2name(arg1); ^ vmmapi_wrap.c:2918:14: warning: cast to 'char *' from smaller integer type 'int' [-Wint-to-pointer-cast] result = (char *)vm_capability_type2name(arg1); ^ vmmapi_wrap.c:2933:22: error: variable has incomplete type 'enum vm_cap_type' enum vm_cap_type arg3 ; ^ vmmapi_wrap.c:2933:10: note: forward declaration of 'enum vm_cap_type' enum vm_cap_type arg3 ; ^ vmmapi_wrap.c:2964:12: error: cast to incomplete type 'enum vm_cap_type' arg3 = (enum vm_cap_type)(val3); ^ vmmapi_wrap.c:2933:10: note: forward declaration of 'enum vm_cap_type' enum vm_cap_type arg3 ; ^ vmmapi_wrap.c:2970:19: warning: implicit declaration of function 'vm_get_capability' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_get_capability(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:2991:22: error: variable has incomplete type 'enum vm_cap_type' enum vm_cap_type arg3 ; ^ vmmapi_wrap.c:2991:10: note: forward declaration of 'enum vm_cap_type' enum vm_cap_type arg3 ; ^ vmmapi_wrap.c:3022:12: error: cast to incomplete type 'enum vm_cap_type' arg3 = (enum vm_cap_type)(val3); ^ vmmapi_wrap.c:2991:10: note: forward declaration of 'enum vm_cap_type' enum vm_cap_type arg3 ; ^ vmmapi_wrap.c:3028:19: warning: implicit declaration of function 'vm_set_capability' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_set_capability(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:3086:19: warning: implicit declaration of function 'vm_assign_pptdev' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_assign_pptdev(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:3144:19: warning: implicit declaration of function 'vm_unassign_pptdev' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_unassign_pptdev(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:3238:19: warning: implicit declaration of function 'vm_map_pptdev_mmio' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_map_pptdev_mmio(arg1,arg2,arg3,a... ^ vmmapi_wrap.c:3330:19: warning: implicit declaration of function 'vm_setup_msi' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_setup_msi(arg1,arg2,arg3,arg4,ar... ^ vmmapi_wrap.c:3454:19: warning: implicit declaration of function 'vm_setup_msix' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_setup_msix(arg1,arg2,arg3,arg4,a... ^ vmmapi_wrap.c:3516:26: warning: implicit declaration of function 'vm_get_stats' is invalid in C99 [-Wimplicit-function-declaration] result = (uint64_t *)vm_get_stats(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:3516:14: warning: cast to 'uint64_t *' (aka 'unsigned long *') from smaller integer type 'int' [-Wint-to-pointer-cast] result = (uint64_t *)vm_get_stats(arg1,arg2,arg3,arg4); ^ vmmapi_wrap.c:3558:22: warning: implicit declaration of function 'vm_get_stat_desc' is invalid in C99 [-Wimplicit-function-declaration] result = (char *)vm_get_stat_desc(arg1,arg2); ^ vmmapi_wrap.c:3558:14: warning: cast to 'char *' from smaller integer type 'int' [-Wint-to-pointer-cast] result = (char *)vm_get_stat_desc(arg1,arg2); ^ vmmapi_wrap.c:3604:19: warning: implicit declaration of function 'vm_get_x2apic_state' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_get_x2apic_state(arg1,arg2,arg3); ^ vmmapi_wrap.c:3623:23: error: variable has incomplete type 'enum x2apic_state' enum x2apic_state arg3 ; ^ vmmapi_wrap.c:3623:10: note: forward declaration of 'enum x2apic_state' enum x2apic_state arg3 ; ^ vmmapi_wrap.c:3651:12: error: cast to incomplete type 'enum x2apic_state' arg3 = (enum x2apic_state)(val3); ^ vmmapi_wrap.c:3623:10: note: forward declaration of 'enum x2apic_state' enum x2apic_state arg3 ; ^ vmmapi_wrap.c:3652:19: warning: implicit declaration of function 'vm_set_x2apic_state' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_set_x2apic_state(arg1,arg2,arg3); ^ vmmapi_wrap.c:3692:19: warning: implicit declaration of function 'vcpu_reset' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vcpu_reset(arg1,arg2); ^ vmmapi_wrap.c:3786:19: warning: implicit declaration of function 'vm_setup_freebsd_registers' is invalid in C99 [-Wimplicit-function-declaration] result = (int)vm_setup_freebsd_registers(arg1,arg... ^ vmmapi_wrap.c:3815:5: warning: implicit declaration of function 'vm_setup_freebsd_gdt' is invalid in C99 [-Wimplicit-function-declaration] vm_setup_freebsd_gdt(arg1); ^ vmmapi_wrap.c:4229:61: error: use of undeclared identifier 'VM_MMAP_NONE' ...SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(VM_MMAP_NO... ^ vmmapi_wrap.c:913:80: note: expanded from macro 'SWIG_PERL_CALL_ARGS_1' ...(SWIG_PERL_OBJECT_CALL arg1) ^ /usr/local/lib/perl5/5.16/mach/CORE/sv.h:1851:22: note: expanded from macro 'sv_setsv' sv_setsv_flags(dsv, ssv, SV_GMAGIC|SV_DO_COW_SVSETSV) ^ /usr/local/lib/perl5/5.16/mach/CORE/embed.h:628:59: note: expanded from macro 'sv_setsv_flags' ...Perl_sv_setsv_flags(aTHX_ a,b,c) ^ vmmapi_wrap.c:4234:61: error: use of undeclared identifier 'VM_MMAP_ALL' ...SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(VM_MMAP_AL... ^ vmmapi_wrap.c:913:80: note: expanded from macro 'SWIG_PERL_CALL_ARGS_1' ...(SWIG_PERL_OBJECT_CALL arg1) ^ /usr/local/lib/perl5/5.16/mach/CORE/sv.h:1851:22: note: expanded from macro 'sv_setsv' sv_setsv_flags(dsv, ssv, SV_GMAGIC|SV_DO_COW_SVSETSV) ^ /usr/local/lib/perl5/5.16/mach/CORE/embed.h:628:59: note: expanded from macro 'sv_setsv_flags' ...Perl_sv_setsv_flags(aTHX_ a,b,c) ^ vmmapi_wrap.c:4239:61: error: use of undeclared identifier 'VM_MMAP_SPARSE' ...SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(VM_MMAP_SP... ^ vmmapi_wrap.c:913:80: note: expanded from macro 'SWIG_PERL_CALL_ARGS_1' ...(SWIG_PERL_OBJECT_CALL arg1) ^ /usr/local/lib/perl5/5.16/mach/CORE/sv.h:1851:22: note: expanded from macro 'sv_setsv' sv_setsv_flags(dsv, ssv, SV_GMAGIC|SV_DO_COW_SVSETSV) ^ /usr/local/lib/perl5/5.16/mach/CORE/embed.h:628:59: note: expanded from macro 'sv_setsv_flags' ...Perl_sv_setsv_flags(aTHX_ a,b,c) ^ 41 warnings and 15 errors generated. vmmapi.h:48:42: error: unknown type name 'size_t' int vm_parse_memsize(const char *optarg, size_t *... ^ vmmapi.h:49:42: error: unknown type name 'vm_paddr_t' int vm_get_memory_seg(struct vmctx *ctx, vm_paddr... ^ vmmapi.h:49:58: error: unknown type name 'size_t' ...vmctx *ctx, vm_paddr_t gpa, size_t *ret_len, ^ vmmapi.h:51:40: error: unknown type name 'size_t' int vm_setup_memory(struct vmctx *ctx, size_t len... ^ vmmapi.h:52:37: error: unknown type name 'vm_paddr_t' void *vm_map_gpa(struct vmctx *ctx, vm_paddr_t gad... ^ vmmapi.h:52:55: error: unknown type name 'size_t' ...vmctx *ctx, vm_paddr_t gaddr, size_t len); ^ vmmapi.h:53:37: error: unknown type name 'uint64_t' int vm_get_gpa_pmap(struct vmctx *, uint64_t gpa... ^ vmmapi.h:53:51: error: unknown type name 'uint64_t' int vm_get_gpa_pmap(struct vmctx *, uint64_t gpa, uint64_... ^ vmmapi.h:54:1: error: unknown type name 'uint32_t' uint32_t vm_get_lowmem_limit(struct vmctx *ctx); ^ vmmapi.h:55:45: error: unknown type name 'uint32_t' void vm_set_lowmem_limit(struct vmctx *ctx, uint32... ^ vmmapi.h:57:7: error: unknown type name 'uint64_t' uint64_t base, uint32_t limit, ui... ^ vmmapi.h:57:22: error: unknown type name 'uint32_t' uint64_t base, uint32_t limit, ui... ^ vmmapi.h:57:38: error: unknown type name 'uint32_t' ...uint64_t base, uint32_t limit, uint32_t access); ^ vmmapi.h:59:7: error: unknown type name 'uint64_t' uint64_t *base, uint32_t *limit, ... ^ vmmapi.h:59:23: error: unknown type name 'uint32_t' uint64_t *base, uint32_t *limit, ... ^ vmmapi.h:59:40: error: unknown type name 'uint32_t' ...uint64_t *base, uint32_t *limit, uint32_t *access); ^ vmmapi.h:60:59: error: unknown type name 'uint64_t' ...vmctx *ctx, int vcpu, int reg, uint64_t val); ^ vmmapi.h:61:59: error: unknown type name 'uint64_t' ...vmctx *ctx, int vcpu, int reg, uint64_t *retval); ^ vmmapi.h:62:41: error: unknown type name 'uint64_t' int vm_run(struct vmctx *ctx, int vcpu, uint64_t rip, ^ vmmapi.h:63:16: warning: declaration of 'struct vm_exit' will not be visible outside of this function [-Wvisibility] struct vm_exit *ret_vmexit); ^ vmmapi.h:65:55: warning: declaration of 'enum vm_event_type' will not be visible outside of this function [-Wvisibility] ...vmctx *ctx, int vcpu, enum vm_event_type type, ^ vmmapi.h:67:56: warning: declaration of 'enum vm_event_type' will not be visible outside of this function [-Wvisibility] ...vmctx *ctx, int vcpu, enum vm_event_type type, ^ vmmapi.h:73:57: warning: declaration of 'enum vm_cap_type' will not be visible outside of this function [-Wvisibility] ...vmctx *ctx, int vcpu, enum vm_cap_type cap, ^ vmmapi.h:75:57: warning: declaration of 'enum vm_cap_type' will not be visible outside of this function [-Wvisibility] ...vmctx *ctx, int vcpu, enum vm_cap_type cap, ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] What I do is not right? Thank you. -- С уважением Denis Menshikov |
From: Guru P. <gur...@bu...> - 2015-09-25 23:32:37
|
I have a struct as follows: struct power_model { ... ... uint32_t (*freq_to_volt)(uint32_t freq); }; I would like to wrap these models with SWIG and expose them to Python so that I can run my unit tests. While the SWIG documentation talks about exposing function pointers, it does not talk about function pointers contained within structs. I tried to encapsulate the calls in my interface file %{ #include "models.h" %} %include "models.h" %extend power_model { ... ... %pythoncallback; uint32_t (*freq_to_volt)(uint32_t freq); %nopythoncallback; } I also tried prefixing the field names with `%constant`. With these approaches, I always end up with the same error: In [3]: model.estimate_energy() --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-3-b2e3ace2fc9b> in <module>() ----> 1 model.estimate_energy() TypeError: 'SwigPyObject' object is not callable How can I call the underlying functions referenced by the function pointers contained within `struct power_model`? Regards Guru |
From: lille s. <lil...@gm...> - 2017-08-24 19:44:15
|
<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div> <div>Hi,</div> <div> </div> <div>I would like to generate a R (programming language) wrapper for the following C function:</div> <div> </div> <div><em> int *test(void)<br/> {<br/> int i;</em></div> <div><em> i = 1024;</em></div> <div><em> return (int *) i;<br/> }</em></div> <div> </div> <div> </div> <div>To create this wrapper I am using SWIG with the following interface:</div> <div> </div> <div><em> %module X<br/> %{<br/> extern int *test(void);<br/> %}<br/> extern int *test(void);</em></div> <div> </div> <div><br/> I can successfully create and compile this wrapper. However, when I run the following R code (the wrapper was loaded beforehand):</div> <div> </div> <div><em> print(test())</em></div> <div> </div> <div> </div> <div>It will give the following error:</div> <div> </div> <div><em> Error in getClass(Class, where = topenv(parent.frame())) :<br/> “_p_int” is not a defined class<br/> Calls: print -> test -> new -> getClass</em></div> <div> </div> <div> </div> <div>My question is the following: how can I wrap the C test function (more precisely the int * returned by this function)?<br/> </div> <div>Thank you!</div> </div></div></body></html> |
From: William S F. <ws...@fu...> - 2006-01-20 22:54:53
|
Sharon Tam wrote: > Hi All, > > I have defined a function in my c++ class like: > > virtual int getValue(double* INOUT, const char* field, unsigned short side); > > INOUT is supposed to store the output of the function > > The generated java method is exactly what I expect: > public int getValue(double[] INOUT, String field, int side) { > ... > } > However, in the runtime, it would complain that NoSuchMethodException. > > > My aim is to convert a double pointer parameter in a c++ function to a > java double[] > > Please help > I suggest you modify one of the examples that ship with SWIG and run that as it sounds like you have a build/linking path issue, but without a standalone example it is hard to say. William |
From: Sharon T. <yst...@ya...> - 2006-01-23 00:42:15
|
Hi William, Thanks for answering my question. However, before I added the double* param, the method was working fine, so I don't think it's the building and linking issue. If I want to translate the double* to a double[] in Java, what would you recommend to do? currently, I have to use double *INOUT in order for swig to interpret as double[]. This double* is supposed to store the output value of the function. Thanks again, Sharon William S Fulton <ws...@fu...> wrote: Sharon Tam wrote: > Hi All, > > I have defined a function in my c++ class like: > > virtual int getValue(double* INOUT, const char* field, unsigned short side); > > INOUT is supposed to store the output of the function > > The generated java method is exactly what I expect: > public int getValue(double[] INOUT, String field, int side) { > ... > } > However, in the runtime, it would complain that NoSuchMethodException. > > > My aim is to convert a double pointer parameter in a c++ function to a > java double[] > > Please help > I suggest you modify one of the examples that ship with SWIG and run that as it sounds like you have a build/linking path issue, but without a standalone example it is hard to say. William ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642 _______________________________________________ Swig-user mailing list Swi...@li... https://lists.sourceforge.net/lists/listinfo/swig-user --------------------------------- Yahoo! Photos Showcase holiday pictures in hardcover Photo Books. You design it and well bind it! |