NAME
ExtUtils::Typemaps::Slurp - Typemap for storing objects as a string reference
VERSION
version 0.002
SYNOPSIS
In typemap
my_init_t T_SLURP_VAR
My::Object T_OPAQUEOBJ
In your XS:
static void my_init_t_gather(my_init_t* init, size_t count, SV** args) {
...;
}
typedef object_t* My__Object;
static object_t* object_new(my_init_t* init_arg) {
...;
}
MODULE = My::Object PACKAGE = My::Object PREFIX = object_
My::Object object_new(SV* class, my_init_t arguments, ...)
C_ARGS: &arguments
DESCRIPTION
ExtUtils::Typemaps::Slurp
is a typemap bundle that provides three typemaps that will all slurp all remaining arguments to an xsub: T_SLURP_VAL
, T_SLURP_VAR
and T_SLURP_AV
. This should always be used as final argument, and should be followed by a ...
argument.
T_SLURP_VAL
expects you to define a function $type ${ntype}_gather(SV** arguments, size_t count)
. It will call that function with the argument, and it will return the appropriate value.
T_SLURP_VAR
expects you to define a function void ${ntype}_gather($type* var, SV** arguments, Size_t count)
. It works much the same as TL_SLURP_VAL
except it takes a pointer as its first argument that it will store the value in instead of returning it.
T_SLURP_AV
is a specialization of T_SLURP_VAL
that returns the values as an AV*
.
INCLUSION
To use this typemap template you need to include it into your local typemap. The easiest way to do that is to use the typemap script in App::typemap. E.g.
typemap --merge ExtUtils::Typemaps::IntObj
If you author using Dist::Zilla
you can use Dist::Zilla::Plugin::Typemap instead.
Alternatively, you can include it at runtime by adding the following to your XS file:
INCLUDE_COMMAND: $^X -MExtUtils::Typemaps::Cmd -e "print embeddable_typemap('IntObj')"
That does require adding a build time dependency on this module.
AUTHOR
Leon Timmermans <fawaka@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2024 by Leon Timmermans.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.