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 )