|
NAMEXML::LibXML::Devel - makes functions from LibXML.xs available SYNOPSIS /**********************************************
* C functions you want to access
*/
xmlNode *return_node();
void receive_node(xmlNode *);
###############################################
# XS Code
void *
xs_return_node
CODE:
RETVAL = return_node();
OUTPUT:
RETVAL
void
xs_receive_node
void *n
CODE:
receive_node(n);
###############################################
# Perl code
use XML::LibXML::Devel;
sub return_node
{
my $raw_node = xs_return_node();
my $node = XML::LibXML::Devel::node_to_perl($raw_node);
XML::LibXML::Devel::refcnt_inc($raw_node);
return $node;
}
sub receive_node
{
my ($node) = @_;
my $raw_node = XML::LibXML::Devel::node_from_perl($node);
xs_receive_node($raw_node);
XML::LibXML::Devel::refcnt_inc($raw_node);
}
DESCRIPTION"XML::LibXML::Devel" makes functions from LibXML.xs available that are needed to wrap libxml2 nodes in and out of XML::LibXML::Nodes. This gives cleaner dependencies than using LibXML.so directly. To XS a library that uses libxml2 nodes the first step is to do this so that xmlNodePtr is passed as void *. These raw nodes are then turned into libxml nodes by using this "Devel" functions. Be aware that this module is currently rather experimental. The function names may change if I XS more functions and introduce a reasonable naming convention. Be also aware that this module is a great tool to cause segfaults and introduce memory leaks. It does however provide a partial cure by making "xmlMemUsed" available as "mem_used". FUNCTIONSNODE MANAGEMENT
MEMORY DEBUGGING
EXPORTNone by default. SEE ALSOThis was created to support the needs of Apache2::ModXml2. So this can serve as an example. AUTHORJoachim Zobel <jz-2011@heute-morgen.de> COPYRIGHT AND LICENSECopyright (C) 2011 by Joachim Zobel This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.1 or, at your option, any later version of Perl 5 you may have available.
|