ExtUtils-XSBuilder
view release on metacpan or search on metacpan
xsbuilder.osc2002.pod view on Meta::CPAN
...
=item The following map file entry tells XSBuilder that the value of C<res_p> should be returned
dav_get_resource | | r, <res_p
The C function
int dav_get_resource(request_rec *r, dav_resource **res_p) ;
How to call it from Perl
# get a sub request of the actual document
$subr = $r -> lookup_uri($uri);
# get a mod_dav resource object
my ($err, $resource) = $subr->get_resource;
=item You can let XSBuilder insert your custom code, for the interface
If you call C<get_props> from Perl C<glue_dav_get_props> will be called, which can adjust
the arguments and return types as necessary. The actual code for C<glue_dav_get_props>
will be taken from separate include file.
dav_get_props | glue_
dav_get_allprops | glue_
xsinclude\Apache\DAV\PropResult\Apache__DAV__PropResults.h
dav_get_props_result * dav_glue_get_props(dav_propdb * db, dav_xml_doc *doc)
{
dav_get_props_result * result = (dav_get_props_result *)ap_palloc (db -> p, sizeof (dav_get_props_result)) ;
*result = dav_get_props(db, doc) ;
return result ;
}
=item Arguments can be replaced
MODULE=Apache::Array PACKAGE=Apache::Array PREFIX=ap_
ap_make_array | ap_make_array(r->pool, nelts, elt_size) | request_rec *:r, nelts, elt_size
ap_make_array requires a pool a it's first parameter, we pass the request_rec from Perl and
XSBuilder will take the pool from the request_rec.
=back
=head1 structure map
MALLOC=strdup:$dest = ($type)strdup($src)
FREE=strdup:free($src)
<dav_xml_elem>
name
ns
lang
first_cdata
following_cdata
parent
next
first_child
attr
last_child
ns_scope
propid
provider
ns_map
new
</dav_xml_elem>
MALLOC=strdup:$dest = ($type)ap_pstrdup(obj -> pool, $src)
<array_header>
pool
elt_size
nelts
nalloc
elts
private
</array_header>
=head2 Create a accessor functions for every element and, if requested, a new method
$setprop = Apache::DAV::XMLElem -> new ({name => 'prop'}) ;
$elem = Apache::DAV::XMLElem -> new ({name => $name, ns => $namespaces}) ;
$setprop -> first_child($elem) ;
$first = $setprop -> first_child ;
=head2 some datatypes, like strings, requires dynamic allocated memory
From _types.map,which conatins a set of standard types
int | IV
int * | UNDEFINED
unsigned int | UV
signed int | IV
long | IV
long int | IV
unsigned long | UV
unsigned | UV
char * | PV | | | strdup
const char * | PV | | | strdup
const char ** | UNDEFINED
char const * | PV | | | strdup
unsigned char * | PV | | | strdup
const unsigned char * | PV | | | strdup
...
=head1 callback maps
Callback maps have the same options a function maps
# dav_hooks_db -> open
dav_error *(*)(pool * p,const dav_resource * resource,int ro,dav_db * * pdb) | p, resource, ro=0, <pdb
( run in 0.570 second using v1.01-cache-2.11-cpan-6aa56a78535 )