XS
generado tiene en su cabecera
las declaraciones XSUB de las funciones de la librería:
lhp@nereida:~/projects/perl/src/XSUB/h2xsexample/Coord$ cat -n Coord.xs 1 #include "EXTERN.h" 2 #include "perl.h" 3 #include "XSUB.h" 4 5 #include "ppport.h" 6 7 #include <coord.h> 8 9 #include "const-c.inc" 10 11 MODULE = Coord PACKAGE = Coord 12 13 INCLUDE: const-xs.inc 14 15 polar 16 getpolar() 17 18 rectangular 19 getrectangular() 20 21 rectangular 22 pl2rc(p) 23 polar p 24 25 char * 26 polar2str(f, p) 27 const char * f 28 polar p 29 .. ................. resto de declaraciones
Después de las declaraciones siguen dos paquetes asociados con las declaraciones de
rectangular
y rectangular *
.
El paquete rectangular
provee los métodos
new
y _to_ptr
:
39 MODULE = Coord PACKAGE = rectangular 40 41 rectangular * 42 _to_ptr(THIS) 43 rectangular THIS = NO_INIT 44 PROTOTYPE: $ 45 CODE: 46 if (sv_derived_from(ST(0), "rectangular")) { 47 STRLEN len; 48 char *s = SvPV((SV*)SvRV(ST(0)), len); 49 if (len != sizeof(THIS)) 50 croak("Size %d of packed data != expected %d", 51 len, sizeof(THIS)); 52 RETVAL = (rectangular *)s; 53 } 54 else 55 croak("THIS is not of type rectangular"); 56 OUTPUT: 57 RETVAL 58 59 rectangular 60 new(CLASS) 61 char *CLASS = NO_INIT 62 PROTOTYPE: $ 63 CODE: 64 Zero((void*)&RETVAL, sizeof(RETVAL), char); 65 OUTPUT: 66 RETVAL