#include "src/xh_config.h"
#include "src/xh_core.h"
MODULE = XML::Hash::XS PACKAGE = XML::Hash::XS
PROTOTYPES: DISABLE
xh_opts_t *
new
(CLASS,...)
PREINIT:
xh_opts_t *opts;
CODE:
dXCPT;
if
((opts = xh_create_opts()) == NULL)
croak(
"Malloc error in new()"
);
XCPT_TRY_START
{
xh_parse_param(opts, 1, ax, items);
} XCPT_TRY_END
XCPT_CATCH
{
xh_destroy_opts(opts);
XCPT_RETHROW;
}
RETVAL = opts;
OUTPUT:
RETVAL
SV *
hash2xml(...)
PREINIT:
xh_h2x_ctx_t ctx;
SV *result;
CODE:
dXCPT;
XCPT_TRY_START
{
xh_h2x_init_ctx(&ctx, ax, items);
#ifdef XH_HAVE_DOM
if
(ctx.opts.doc) {
result = xh_h2d(&ctx);
}
else
{
result = xh_h2x(&ctx);
}
#else
result = xh_h2x(&ctx);
#endif
} XCPT_TRY_END
XCPT_CATCH
{
xh_h2x_destroy_ctx(&ctx);
XCPT_RETHROW;
}
if
(ctx.opts.output != NULL) result = NULL;
xh_h2x_destroy_ctx(&ctx);
if
(result == NULL) XSRETURN_UNDEF;
RETVAL = result;
OUTPUT:
RETVAL
SV *
xml2hash(...)
PREINIT:
xh_x2h_ctx_t ctx;
SV *result;
CODE:
dXCPT;
XCPT_TRY_START
{
xh_x2h_init_ctx(&ctx, ax, items);
result = xh_x2h(&ctx);
} XCPT_TRY_END
XCPT_CATCH
{
xh_x2h_destroy_ctx(&ctx);
XCPT_RETHROW;
}
if
(ctx.opts.cb != NULL) result = NULL;
xh_x2h_destroy_ctx(&ctx);
if
(result == NULL) XSRETURN_UNDEF;
RETVAL = result;
OUTPUT:
RETVAL
void
DESTROY(opts)
xh_opts_t *opts;
CODE:
xh_destroy_opts(opts);
free
(opts);