mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	New XS framework for C and C++ code
This commit is contained in:
		
							parent
							
								
									c88d8a5842
								
							
						
					
					
						commit
						9d27b5e4a7
					
				
					 18 changed files with 7889 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								Build.PL
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								Build.PL
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -59,6 +59,7 @@ foreach my $module (sort keys %modules) {
 | 
			
		|||
    my $version = $modules{$module};
 | 
			
		||||
    system $cpanm, '--sudo', "$module~$version";
 | 
			
		||||
}
 | 
			
		||||
system $cpanm, '--sudo', '--reinstall', './xs';
 | 
			
		||||
 | 
			
		||||
if (eval "use App::Prove; 1") {
 | 
			
		||||
    App::Prove->new->run;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										41
									
								
								xs/Build.PL
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								xs/Build.PL
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
#!/usr/bin/perl -w
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
 | 
			
		||||
use Module::Build::WithXSpp;
 | 
			
		||||
 | 
			
		||||
my $build = Module::Build::WithXSpp->new(
 | 
			
		||||
    module_name     => 'Slic3r::XS',
 | 
			
		||||
    dist_abstract   => 'XS code for Slic3r',
 | 
			
		||||
    build_requires => {qw(
 | 
			
		||||
        ExtUtils::Typemaps::Default 0.05
 | 
			
		||||
        ExtUtils::XSpp              0.16
 | 
			
		||||
        Module::Build               0.3601
 | 
			
		||||
        Test::More                  0
 | 
			
		||||
    )},
 | 
			
		||||
    configure_requires => {qw(
 | 
			
		||||
        ExtUtils::CppGuess          0.07
 | 
			
		||||
        Module::Build               0.38
 | 
			
		||||
        Module::Build::WithXSpp     0.10
 | 
			
		||||
    )},
 | 
			
		||||
    
 | 
			
		||||
    # HAS_BOOL         : stops Perl/lib/CORE/handy.h from doing "#  define bool char" for MSVC
 | 
			
		||||
    extra_compiler_flags => [qw(-DHAS_BOOL)],
 | 
			
		||||
    
 | 
			
		||||
    # Provides extra C typemaps that are auto-merged
 | 
			
		||||
    extra_typemap_modules => {
 | 
			
		||||
        'ExtUtils::Typemaps::Default' => '0.05',
 | 
			
		||||
    },
 | 
			
		||||
    
 | 
			
		||||
    # for MSVC builds
 | 
			
		||||
    early_includes => [qw(
 | 
			
		||||
        cstring
 | 
			
		||||
        cstdlib
 | 
			
		||||
        ostream
 | 
			
		||||
    )]
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$build->create_build_script;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
							
								
								
									
										11
									
								
								xs/MANIFEST
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								xs/MANIFEST
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
Build.PL
 | 
			
		||||
lib/Slic3r/TriangleMesh/XS.pm
 | 
			
		||||
lib/Slic3r/XS.pm
 | 
			
		||||
MANIFEST			This list of files
 | 
			
		||||
src/myinit.h
 | 
			
		||||
src/ppport.h
 | 
			
		||||
t/01_trianglemesh.t
 | 
			
		||||
xsp/mytype.map
 | 
			
		||||
xsp/TriangleMesh.xsp
 | 
			
		||||
xsp/typemap.xspt
 | 
			
		||||
xsp/XS.xsp
 | 
			
		||||
							
								
								
									
										15
									
								
								xs/MANIFEST.SKIP.bak
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								xs/MANIFEST.SKIP.bak
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
#!include_default
 | 
			
		||||
# Avoid configuration metadata file
 | 
			
		||||
^MYMETA\.
 | 
			
		||||
 | 
			
		||||
# Avoid Module::Build generated and utility files.
 | 
			
		||||
\bBuild$
 | 
			
		||||
\bBuild.bat$
 | 
			
		||||
\b_build
 | 
			
		||||
\bBuild.COM$
 | 
			
		||||
\bBUILD.COM$
 | 
			
		||||
\bbuild.com$
 | 
			
		||||
^MANIFEST\.SKIP
 | 
			
		||||
 | 
			
		||||
# Avoid archives of this distribution
 | 
			
		||||
\bSlic3r-XS-[\d\.\_]+
 | 
			
		||||
							
								
								
									
										11
									
								
								xs/MANIFEST.bak
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								xs/MANIFEST.bak
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
Build.PL
 | 
			
		||||
lib/Slic3r/TriangleMesh/XS.pm
 | 
			
		||||
lib/Slic3r/XS.pm
 | 
			
		||||
MANIFEST			This list of files
 | 
			
		||||
src/myinit.h
 | 
			
		||||
src/ppport.h
 | 
			
		||||
t/01_trianglemesh.t
 | 
			
		||||
xsp/mytype.map
 | 
			
		||||
xsp/TriangleMesh.xsp
 | 
			
		||||
xsp/typemap.xspt
 | 
			
		||||
xsp/XS.xsp
 | 
			
		||||
							
								
								
									
										236
									
								
								xs/buildtmp/XS.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								xs/buildtmp/XS.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,236 @@
 | 
			
		|||
/*
 | 
			
		||||
 * This file was generated automatically by ExtUtils::ParseXS version 3.15 from the
 | 
			
		||||
 * contents of main.xs. Do not edit this file, edit main.xs instead.
 | 
			
		||||
 *
 | 
			
		||||
 *    ANY CHANGES MADE HERE WILL BE LOST!
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#line 1 "buildtmp/main.xs"
 | 
			
		||||
/*
 | 
			
		||||
 * WARNING: This file was auto-generated. Changes will be lost!
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <cstdlib>
 | 
			
		||||
#include <ostream>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
#include "EXTERN.h"
 | 
			
		||||
#include "perl.h"
 | 
			
		||||
#include "XSUB.h"
 | 
			
		||||
#include "ppport.h"
 | 
			
		||||
#undef do_open
 | 
			
		||||
#undef do_close
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#line 32 "buildtmp/XS.c"
 | 
			
		||||
#ifndef PERL_UNUSED_VAR
 | 
			
		||||
#  define PERL_UNUSED_VAR(var) if (0) var = var
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef dVAR
 | 
			
		||||
#  define dVAR		dNOOP
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* This stuff is not part of the API! You have been warned. */
 | 
			
		||||
#ifndef PERL_VERSION_DECIMAL
 | 
			
		||||
#  define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PERL_DECIMAL_VERSION
 | 
			
		||||
#  define PERL_DECIMAL_VERSION \
 | 
			
		||||
	  PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PERL_VERSION_GE
 | 
			
		||||
#  define PERL_VERSION_GE(r,v,s) \
 | 
			
		||||
	  (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PERL_VERSION_LE
 | 
			
		||||
#  define PERL_VERSION_LE(r,v,s) \
 | 
			
		||||
	  (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* XS_INTERNAL is the explicit static-linkage variant of the default
 | 
			
		||||
 * XS macro.
 | 
			
		||||
 *
 | 
			
		||||
 * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
 | 
			
		||||
 * "STATIC", ie. it exports XSUB symbols. You probably don't want that
 | 
			
		||||
 * for anything but the BOOT XSUB.
 | 
			
		||||
 *
 | 
			
		||||
 * See XSUB.h in core!
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* TODO: This might be compatible further back than 5.10.0. */
 | 
			
		||||
#if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
 | 
			
		||||
#  undef XS_EXTERNAL
 | 
			
		||||
#  undef XS_INTERNAL
 | 
			
		||||
#  if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
 | 
			
		||||
#    define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
 | 
			
		||||
#    define XS_INTERNAL(name) STATIC XSPROTO(name)
 | 
			
		||||
#  endif
 | 
			
		||||
#  if defined(__SYMBIAN32__)
 | 
			
		||||
#    define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
 | 
			
		||||
#    define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
 | 
			
		||||
#  endif
 | 
			
		||||
#  ifndef XS_EXTERNAL
 | 
			
		||||
#    if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
 | 
			
		||||
#      define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
 | 
			
		||||
#      define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
 | 
			
		||||
#    else
 | 
			
		||||
#      ifdef __cplusplus
 | 
			
		||||
#        define XS_EXTERNAL(name) extern "C" XSPROTO(name)
 | 
			
		||||
#        define XS_INTERNAL(name) static XSPROTO(name)
 | 
			
		||||
#      else
 | 
			
		||||
#        define XS_EXTERNAL(name) XSPROTO(name)
 | 
			
		||||
#        define XS_INTERNAL(name) STATIC XSPROTO(name)
 | 
			
		||||
#      endif
 | 
			
		||||
#    endif
 | 
			
		||||
#  endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* perl >= 5.10.0 && perl <= 5.15.1 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* The XS_EXTERNAL macro is used for functions that must not be static
 | 
			
		||||
 * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
 | 
			
		||||
 * macro defined, the best we can do is assume XS is the same.
 | 
			
		||||
 * Dito for XS_INTERNAL.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef XS_EXTERNAL
 | 
			
		||||
#  define XS_EXTERNAL(name) XS(name)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef XS_INTERNAL
 | 
			
		||||
#  define XS_INTERNAL(name) XS(name)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Now, finally, after all this mess, we want an ExtUtils::ParseXS
 | 
			
		||||
 * internal macro that we're free to redefine for varying linkage due
 | 
			
		||||
 * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
 | 
			
		||||
 * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#undef XS_EUPXS
 | 
			
		||||
#if defined(PERL_EUPXS_ALWAYS_EXPORT)
 | 
			
		||||
#  define XS_EUPXS(name) XS_EXTERNAL(name)
 | 
			
		||||
#else
 | 
			
		||||
   /* default to internal */
 | 
			
		||||
#  define XS_EUPXS(name) XS_INTERNAL(name)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
 | 
			
		||||
#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
 | 
			
		||||
 | 
			
		||||
/* prototype to pass -Wmissing-prototypes */
 | 
			
		||||
STATIC void
 | 
			
		||||
S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params);
 | 
			
		||||
 | 
			
		||||
STATIC void
 | 
			
		||||
S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params)
 | 
			
		||||
{
 | 
			
		||||
    const GV *const gv = CvGV(cv);
 | 
			
		||||
 | 
			
		||||
    PERL_ARGS_ASSERT_CROAK_XS_USAGE;
 | 
			
		||||
 | 
			
		||||
    if (gv) {
 | 
			
		||||
        const char *const gvname = GvNAME(gv);
 | 
			
		||||
        const HV *const stash = GvSTASH(gv);
 | 
			
		||||
        const char *const hvname = stash ? HvNAME(stash) : NULL;
 | 
			
		||||
 | 
			
		||||
        if (hvname)
 | 
			
		||||
            Perl_croak(aTHX_ "Usage: %s::%s(%s)", hvname, gvname, params);
 | 
			
		||||
        else
 | 
			
		||||
            Perl_croak(aTHX_ "Usage: %s(%s)", gvname, params);
 | 
			
		||||
    } else {
 | 
			
		||||
        /* Pants. I don't think that it should be possible to get here. */
 | 
			
		||||
        Perl_croak(aTHX_ "Usage: CODE(0x%"UVxf")(%s)", PTR2UV(cv), params);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#undef  PERL_ARGS_ASSERT_CROAK_XS_USAGE
 | 
			
		||||
 | 
			
		||||
#ifdef PERL_IMPLICIT_CONTEXT
 | 
			
		||||
#define croak_xs_usage(a,b)    S_croak_xs_usage(aTHX_ a,b)
 | 
			
		||||
#else
 | 
			
		||||
#define croak_xs_usage        S_croak_xs_usage
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* NOTE: the prototype of newXSproto() is different in versions of perls,
 | 
			
		||||
 * so we define a portable version of newXSproto()
 | 
			
		||||
 */
 | 
			
		||||
#ifdef newXS_flags
 | 
			
		||||
#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
 | 
			
		||||
#else
 | 
			
		||||
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
 | 
			
		||||
#endif /* !defined(newXS_flags) */
 | 
			
		||||
 | 
			
		||||
#line 174 "buildtmp/XS.c"
 | 
			
		||||
 | 
			
		||||
/* INCLUDE_COMMAND:  Including output of '/opt/local/bin/perl -MExtUtils::XSpp::Cmd -e xspp -- -t /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/typemap.xspt  /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/TriangleMesh.xsp' from 'main.xs' */
 | 
			
		||||
 | 
			
		||||
#include <exception>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
XS_EUPXS(XS_Slic3r__TriangleMesh__XS_hello_world); /* prototype to pass -Wmissing-prototypes */
 | 
			
		||||
XS_EUPXS(XS_Slic3r__TriangleMesh__XS_hello_world)
 | 
			
		||||
{
 | 
			
		||||
    dVAR; dXSARGS;
 | 
			
		||||
    if (items != 0)
 | 
			
		||||
       croak_xs_usage(cv,  "");
 | 
			
		||||
    {
 | 
			
		||||
	std::string	RETVAL;
 | 
			
		||||
#line 14 "/opt/local/bin/perl -MExtUtils::XSpp::Cmd -e xspp -- -t /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/typemap.xspt  /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/TriangleMesh.xsp"
 | 
			
		||||
    RETVAL = "Hello world!";
 | 
			
		||||
#line 191 "buildtmp/XS.c"
 | 
			
		||||
    ST(0) = newSVpvn( RETVAL.c_str(), RETVAL.length() );
 | 
			
		||||
	sv_2mortal(ST(0));
 | 
			
		||||
    }
 | 
			
		||||
    XSRETURN(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* INCLUDE: Returning to 'main.xs' from '/opt/local/bin/perl -MExtUtils::XSpp::Cmd -e xspp -- -t /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/typemap.xspt  /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/TriangleMesh.xsp' */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* INCLUDE_COMMAND:  Including output of '/opt/local/bin/perl -MExtUtils::XSpp::Cmd -e xspp -- -t /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/typemap.xspt  /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/XS.xsp' from 'main.xs' */
 | 
			
		||||
 | 
			
		||||
#include <exception>
 | 
			
		||||
 | 
			
		||||
#include <myinit.h>
 | 
			
		||||
 | 
			
		||||
/* INCLUDE: Returning to 'main.xs' from '/opt/local/bin/perl -MExtUtils::XSpp::Cmd -e xspp -- -t /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/typemap.xspt  /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/XS.xsp' */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C"
 | 
			
		||||
#endif
 | 
			
		||||
XS_EXTERNAL(boot_Slic3r__XS); /* prototype to pass -Wmissing-prototypes */
 | 
			
		||||
XS_EXTERNAL(boot_Slic3r__XS)
 | 
			
		||||
{
 | 
			
		||||
    dVAR; dXSARGS;
 | 
			
		||||
#if (PERL_REVISION == 5 && PERL_VERSION < 9)
 | 
			
		||||
    char* file = __FILE__;
 | 
			
		||||
#else
 | 
			
		||||
    const char* file = __FILE__;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    PERL_UNUSED_VAR(cv); /* -W */
 | 
			
		||||
    PERL_UNUSED_VAR(items); /* -W */
 | 
			
		||||
#ifdef XS_APIVERSION_BOOTCHECK
 | 
			
		||||
    XS_APIVERSION_BOOTCHECK;
 | 
			
		||||
#endif
 | 
			
		||||
    XS_VERSION_BOOTCHECK;
 | 
			
		||||
 | 
			
		||||
        newXS("Slic3r::TriangleMesh::XS::hello_world", XS_Slic3r__TriangleMesh__XS_hello_world, file);
 | 
			
		||||
#if (PERL_REVISION == 5 && PERL_VERSION >= 9)
 | 
			
		||||
  if (PL_unitcheckav)
 | 
			
		||||
       call_list(PL_scopestack_ix, PL_unitcheckav);
 | 
			
		||||
#endif
 | 
			
		||||
    XSRETURN_YES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								xs/buildtmp/XS.o
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								xs/buildtmp/XS.o
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										27
									
								
								xs/buildtmp/main.xs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								xs/buildtmp/main.xs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
/*
 | 
			
		||||
 * WARNING: This file was auto-generated. Changes will be lost!
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <cstdlib>
 | 
			
		||||
#include <ostream>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
#include "EXTERN.h"
 | 
			
		||||
#include "perl.h"
 | 
			
		||||
#include "XSUB.h"
 | 
			
		||||
#include "ppport.h"
 | 
			
		||||
#undef do_open
 | 
			
		||||
#undef do_close
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
MODULE = Slic3r::XS	PACKAGE = Slic3r::XS
 | 
			
		||||
 | 
			
		||||
INCLUDE_COMMAND: $^X -MExtUtils::XSpp::Cmd -e xspp -- -t /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/typemap.xspt  /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/TriangleMesh.xsp
 | 
			
		||||
 | 
			
		||||
INCLUDE_COMMAND: $^X -MExtUtils::XSpp::Cmd -e xspp -- -t /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/typemap.xspt  /Users/al/Documents/Software/Slic3r/Slic3r/xs/xsp/XS.xsp
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										429
									
								
								xs/buildtmp/typemap
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										429
									
								
								xs/buildtmp/typemap
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,429 @@
 | 
			
		|||
TYPEMAP
 | 
			
		||||
int	T_IV
 | 
			
		||||
signed int	T_IV
 | 
			
		||||
short	T_IV
 | 
			
		||||
signed short	T_IV
 | 
			
		||||
long	T_IV
 | 
			
		||||
signed long	T_IV
 | 
			
		||||
char	T_IV
 | 
			
		||||
signed char	T_IV
 | 
			
		||||
short int	T_IV
 | 
			
		||||
signed short int	T_IV
 | 
			
		||||
long int	T_IV
 | 
			
		||||
signed long int	T_IV
 | 
			
		||||
long long	T_IV
 | 
			
		||||
signed long long	T_IV
 | 
			
		||||
time_t	T_IV
 | 
			
		||||
Sint16	T_IV
 | 
			
		||||
Sint32	T_IV
 | 
			
		||||
Sint64	T_IV
 | 
			
		||||
unsigned int	T_UV
 | 
			
		||||
unsigned short	T_UV
 | 
			
		||||
unsigned long	T_UV
 | 
			
		||||
unsigned char	T_UV
 | 
			
		||||
unsigned short int	T_UV
 | 
			
		||||
unsigned long int	T_UV
 | 
			
		||||
unsigned long long	T_UV
 | 
			
		||||
unsigned	T_UV
 | 
			
		||||
Uint16	T_UV
 | 
			
		||||
Uint32	T_UV
 | 
			
		||||
Uint64	T_UV
 | 
			
		||||
size_t	T_UV
 | 
			
		||||
bool	T_UV
 | 
			
		||||
float	T_NV
 | 
			
		||||
double	T_NV
 | 
			
		||||
long double	T_NV
 | 
			
		||||
const int	T_IV
 | 
			
		||||
const signed int	T_IV
 | 
			
		||||
const short	T_IV
 | 
			
		||||
const signed short	T_IV
 | 
			
		||||
const long	T_IV
 | 
			
		||||
const signed long	T_IV
 | 
			
		||||
const char	T_IV
 | 
			
		||||
const signed char	T_IV
 | 
			
		||||
const short int	T_IV
 | 
			
		||||
const signed short int	T_IV
 | 
			
		||||
const long int	T_IV
 | 
			
		||||
const signed long int	T_IV
 | 
			
		||||
const long long	T_IV
 | 
			
		||||
const signed long long	T_IV
 | 
			
		||||
const time_t	T_IV
 | 
			
		||||
const Sint16	T_IV
 | 
			
		||||
const Sint32	T_IV
 | 
			
		||||
const Sint64	T_IV
 | 
			
		||||
const unsigned int	T_UV
 | 
			
		||||
const unsigned short	T_UV
 | 
			
		||||
const unsigned long	T_UV
 | 
			
		||||
const unsigned char	T_UV
 | 
			
		||||
const unsigned short int	T_UV
 | 
			
		||||
const unsigned long int	T_UV
 | 
			
		||||
const unsigned long long	T_UV
 | 
			
		||||
const unsigned	T_UV
 | 
			
		||||
const Uint16	T_UV
 | 
			
		||||
const Uint32	T_UV
 | 
			
		||||
const Uint64	T_UV
 | 
			
		||||
const size_t	T_UV
 | 
			
		||||
const bool	T_UV
 | 
			
		||||
const float	T_NV
 | 
			
		||||
const double	T_NV
 | 
			
		||||
const long double	T_NV
 | 
			
		||||
HV *	T_HvRV
 | 
			
		||||
AV *	T_AvRV
 | 
			
		||||
std::string	T_STD_STRING
 | 
			
		||||
std::string*	T_STD_STRING_PTR
 | 
			
		||||
std::vector< double >*	T_STD_VECTOR_DOUBLE_PTR
 | 
			
		||||
std::vector<double>*	T_STD_VECTOR_DOUBLE_PTR
 | 
			
		||||
std::vector< double >	T_STD_VECTOR_DOUBLE
 | 
			
		||||
std::vector<double>	T_STD_VECTOR_DOUBLE
 | 
			
		||||
std::vector< int >*	T_STD_VECTOR_INT_PTR
 | 
			
		||||
std::vector<int>*	T_STD_VECTOR_INT_PTR
 | 
			
		||||
std::vector< int >	T_STD_VECTOR_INT
 | 
			
		||||
std::vector<int>	T_STD_VECTOR_INT
 | 
			
		||||
std::vector< unsigned int >*	T_STD_VECTOR_UINT_PTR
 | 
			
		||||
std::vector<unsigned int>*	T_STD_VECTOR_UINT_PTR
 | 
			
		||||
std::vector< unsigned int >	T_STD_VECTOR_UINT
 | 
			
		||||
std::vector<unsigned int>	T_STD_VECTOR_UINT
 | 
			
		||||
std::vector<std::string>	T_STD_VECTOR_STD_STRING
 | 
			
		||||
std::vector<std::string>*	T_STD_VECTOR_STD_STRING_PTR
 | 
			
		||||
std::vector<char*>	T_STD_VECTOR_CSTRING
 | 
			
		||||
std::vector<char*>*	T_STD_VECTOR_CSTRING_PTR
 | 
			
		||||
 | 
			
		||||
INPUT
 | 
			
		||||
O_OBJECT
 | 
			
		||||
	if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
 | 
			
		||||
		$var = ($type)SvIV((SV*)SvRV( $arg ));
 | 
			
		||||
	else{
 | 
			
		||||
		warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
 | 
			
		||||
		XSRETURN_UNDEF;
 | 
			
		||||
	}
 | 
			
		||||
T_OBJECT
 | 
			
		||||
	if( SvROK($arg) )
 | 
			
		||||
		$var = ($type)SvIV((SV*)SvRV( $arg ));
 | 
			
		||||
	else{
 | 
			
		||||
		warn( \"${Package}::$func_name() -- $var is not an SV reference\" );
 | 
			
		||||
		XSRETURN_UNDEF;
 | 
			
		||||
	}
 | 
			
		||||
O_HvRV
 | 
			
		||||
	if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) )
 | 
			
		||||
		$var = (HV*)SvRV( $arg );
 | 
			
		||||
	else {
 | 
			
		||||
		warn( \"${Package}::$func_name() -- $var is not a blessed HV reference\" );
 | 
			
		||||
		XSRETURN_UNDEF;
 | 
			
		||||
	}
 | 
			
		||||
T_HvRV
 | 
			
		||||
	if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) )
 | 
			
		||||
		$var = (HV*)SvRV( $arg );
 | 
			
		||||
	else {
 | 
			
		||||
		warn( \"${Package}::$func_name() -- $var is not an HV reference\" );
 | 
			
		||||
		XSRETURN_UNDEF;
 | 
			
		||||
	}
 | 
			
		||||
O_AvRV
 | 
			
		||||
	if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) )
 | 
			
		||||
		$var = (AV*)SvRV( $arg );
 | 
			
		||||
	else {
 | 
			
		||||
		warn( \"${Package}::$func_name() -- $var is not a blessed AV reference\" );
 | 
			
		||||
		XSRETURN_UNDEF;
 | 
			
		||||
	}
 | 
			
		||||
T_AvRV
 | 
			
		||||
	if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) )
 | 
			
		||||
		$var = (AV*)SvRV( $arg );
 | 
			
		||||
	else {
 | 
			
		||||
		warn( \"${Package}::$func_name() -- $var is not an AV reference\" );
 | 
			
		||||
		XSRETURN_UNDEF;
 | 
			
		||||
	}
 | 
			
		||||
T_STD_STRING
 | 
			
		||||
    $var = std::string( SvPV_nolen( $arg ), SvCUR( $arg ) );
 | 
			
		||||
T_STD_STRING_PTR
 | 
			
		||||
    $var = new std::string( SvPV_nolen( $arg ), SvCUR( $arg ) );
 | 
			
		||||
T_STD_VECTOR_DOUBLE
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int len = av_len(av)+1;
 | 
			
		||||
	  $var = std::vector<double>(len);
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL)
 | 
			
		||||
	      ${var}[i] = SvNV(*elem);
 | 
			
		||||
	    else
 | 
			
		||||
	      ${var}[i] = 0.;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
T_STD_VECTOR_DOUBLE_PTR
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int len = av_len(av)+1;
 | 
			
		||||
	  $var = new std::vector<double>(len);
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL)
 | 
			
		||||
	      (*$var)[i] = SvNV(*elem);
 | 
			
		||||
	    else
 | 
			
		||||
	      (*$var)[i] = 0.;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
T_STD_VECTOR_INT
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int len = av_len(av)+1;
 | 
			
		||||
	  $var = std::vector<int>(len);
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL)
 | 
			
		||||
	      ${var}[i] = SvIV(*elem);
 | 
			
		||||
	    else
 | 
			
		||||
	      ${var}[i] = 0;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
T_STD_VECTOR_INT_PTR
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int len = av_len(av)+1;
 | 
			
		||||
	  $var = new std::vector<int>(len);
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL)
 | 
			
		||||
	      (*$var)[i] = SvIV(*elem);
 | 
			
		||||
	    else
 | 
			
		||||
	      (*$var)[i] = 0.;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
T_STD_VECTOR_UINT
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int len = av_len(av)+1;
 | 
			
		||||
	  $var = std::vector<unsigned int>(len);
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL)
 | 
			
		||||
	      ${var}[i] = SvUV(*elem);
 | 
			
		||||
	    else
 | 
			
		||||
	      ${var}[i] = 0;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
T_STD_VECTOR_UINT_PTR
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int len = av_len(av)+1;
 | 
			
		||||
	  $var = new std::vector<unsigned int>(len);
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL)
 | 
			
		||||
	      (*$var)[i] = SvUV(*elem);
 | 
			
		||||
	    else
 | 
			
		||||
	      (*$var)[i] = 0.;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
T_STD_VECTOR_STD_STRING
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int alen = av_len(av)+1;
 | 
			
		||||
	  $var = std::vector<std::string>(alen);
 | 
			
		||||
	  STRLEN len;
 | 
			
		||||
	  char* tmp;
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < alen; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL) {
 | 
			
		||||
	    tmp = SvPV(*elem, len);
 | 
			
		||||
	      ${var}[i] = std::string(tmp, len);
 | 
			
		||||
	    }
 | 
			
		||||
	    else
 | 
			
		||||
	      ${var}[i] = std::string(\"\");
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
T_STD_VECTOR_STD_STRING_PTR
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int alen = av_len(av)+1;
 | 
			
		||||
	  $var = new std::vector<std::string>(alen);
 | 
			
		||||
	  STRLEN len;
 | 
			
		||||
	  char* tmp;
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < alen; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL) {
 | 
			
		||||
	      tmp = SvPV(*elem, len);
 | 
			
		||||
	      (*$var)[i] = std::string(tmp, len);
 | 
			
		||||
	    }
 | 
			
		||||
	    else
 | 
			
		||||
	      (*$var)[i] = std::string(\"\");
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
T_STD_VECTOR_CSTRING
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int len = av_len(av)+1;
 | 
			
		||||
	  $var = std::vector<char*>(len);
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL) {
 | 
			
		||||
	      ${var}[i] = SvPV_nolen(*elem);
 | 
			
		||||
	    else
 | 
			
		||||
	      ${var}[i] = NULL;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
T_STD_VECTOR_CSTRING_PTR
 | 
			
		||||
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
 | 
			
		||||
	  AV* av = (AV*)SvRV($arg);
 | 
			
		||||
	  const unsigned int len = av_len(av)+1;
 | 
			
		||||
	  $var = new std::vector<char*>(len);
 | 
			
		||||
	  SV** elem;
 | 
			
		||||
	  for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	    elem = av_fetch(av, i, 0);
 | 
			
		||||
	    if (elem != NULL) {
 | 
			
		||||
	      (*$var)[i] = SvPV_nolen(*elem);
 | 
			
		||||
	    else
 | 
			
		||||
	      (*$var)[i] = NULL;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
 | 
			
		||||
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
 | 
			
		||||
	             \"$var\");
 | 
			
		||||
 | 
			
		||||
OUTPUT
 | 
			
		||||
O_OBJECT
 | 
			
		||||
	sv_setref_pv( $arg, CLASS, (void*)$var );
 | 
			
		||||
T_OBJECT
 | 
			
		||||
	sv_setref_pv( $arg, Nullch, (void*)$var );
 | 
			
		||||
O_HvRV
 | 
			
		||||
	$arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) );
 | 
			
		||||
T_HvRV
 | 
			
		||||
	$arg = newRV((SV*)$var);
 | 
			
		||||
O_AvRV
 | 
			
		||||
	$arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) );
 | 
			
		||||
T_AvRV
 | 
			
		||||
	$arg = newRV((SV*)$var);
 | 
			
		||||
T_STD_STRING
 | 
			
		||||
    $arg = newSVpvn( $var.c_str(), $var.length() );
 | 
			
		||||
T_STD_STRING_PTR
 | 
			
		||||
    $arg = newSVpvn( $var->c_str(), $var->length() );
 | 
			
		||||
T_STD_VECTOR_DOUBLE
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var.size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  av_store(av, i, newSVnv(${var}[i]));
 | 
			
		||||
	}
 | 
			
		||||
T_STD_VECTOR_DOUBLE_PTR
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var->size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  av_store(av, i, newSVnv((*$var)[i]));
 | 
			
		||||
	}
 | 
			
		||||
T_STD_VECTOR_INT
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var.size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  av_store(av, i, newSViv(${var}[i]));
 | 
			
		||||
	}
 | 
			
		||||
T_STD_VECTOR_INT_PTR
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var->size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  av_store(av, i, newSViv((*$var)[i]));
 | 
			
		||||
	}
 | 
			
		||||
T_STD_VECTOR_UINT
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var.size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  av_store(av, i, newSVuv(${var}[i]));
 | 
			
		||||
	}
 | 
			
		||||
T_STD_VECTOR_UINT_PTR
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var->size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  av_store(av, i, newSVuv((*$var)[i]));
 | 
			
		||||
	}
 | 
			
		||||
T_STD_VECTOR_STD_STRING
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var.size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  const std::string& str = ${var}[i];
 | 
			
		||||
	  STRLEN len = str.length();
 | 
			
		||||
	  av_store(av, i, newSVpv(str.c_str(), len));
 | 
			
		||||
	}
 | 
			
		||||
T_STD_VECTOR_STD_STRING_PTR
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var->size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  const std::string& str = (*$var)[i];
 | 
			
		||||
	  STRLEN len = str.length();
 | 
			
		||||
	  av_store(av, i, newSVpv(str.c_str(), len));
 | 
			
		||||
	}
 | 
			
		||||
T_STD_VECTOR_CSTRING
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var.size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  STRLEN len = strlen(${var}[i]);
 | 
			
		||||
	  av_store(av, i, newSVpv(${var}[i], len));
 | 
			
		||||
	}
 | 
			
		||||
T_STD_VECTOR_CSTRING_PTR
 | 
			
		||||
	AV* av = newAV();
 | 
			
		||||
	$arg = newRV_noinc((SV*)av);
 | 
			
		||||
	const unsigned int len = $var->size();
 | 
			
		||||
	av_extend(av, len-1);
 | 
			
		||||
	for (unsigned int i = 0; i < len; i++) {
 | 
			
		||||
	  STRLEN len = strlen((*$var)[i]);
 | 
			
		||||
	  av_store(av, i, newSVpv((*$var)[i], len));
 | 
			
		||||
	}
 | 
			
		||||
							
								
								
									
										10
									
								
								xs/lib/Slic3r/TriangleMesh/XS.pm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								xs/lib/Slic3r/TriangleMesh/XS.pm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
package Slic3r::TriangleMesh::XS;
 | 
			
		||||
use warnings;
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
our $VERSION = '0.01';
 | 
			
		||||
 | 
			
		||||
use XSLoader;
 | 
			
		||||
XSLoader::load(__PACKAGE__, $VERSION);
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
							
								
								
									
										11
									
								
								xs/lib/Slic3r/XS.pm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								xs/lib/Slic3r/XS.pm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
package Slic3r::XS;
 | 
			
		||||
use warnings;
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
our $VERSION = '0.01';
 | 
			
		||||
 | 
			
		||||
use XSLoader;
 | 
			
		||||
XSLoader::load(__PACKAGE__, $VERSION);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
							
								
								
									
										0
									
								
								xs/src/myinit.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								xs/src/myinit.h
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										7063
									
								
								xs/src/ppport.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7063
									
								
								xs/src/ppport.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										12
									
								
								xs/t/01_trianglemesh.t
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								xs/t/01_trianglemesh.t
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
#!/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
 | 
			
		||||
use Slic3r::XS;
 | 
			
		||||
use Test::More tests => 1;
 | 
			
		||||
 | 
			
		||||
is Slic3r::TriangleMesh::XS::hello_world(), 'Hello world!',
 | 
			
		||||
    'hello world';
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
							
								
								
									
										14
									
								
								xs/xsp/TriangleMesh.xsp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								xs/xsp/TriangleMesh.xsp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
%module{Slic3r::TriangleMesh::XS};
 | 
			
		||||
%package{Slic3r::TriangleMesh::XS};
 | 
			
		||||
 | 
			
		||||
%{
 | 
			
		||||
PROTOTYPES: DISABLE
 | 
			
		||||
 | 
			
		||||
std::string
 | 
			
		||||
hello_world()
 | 
			
		||||
  CODE:
 | 
			
		||||
    RETVAL = "Hello world!";
 | 
			
		||||
  OUTPUT:
 | 
			
		||||
    RETVAL
 | 
			
		||||
 | 
			
		||||
%}
 | 
			
		||||
							
								
								
									
										6
									
								
								xs/xsp/XS.xsp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								xs/xsp/XS.xsp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
%module{Slic3r::XS};
 | 
			
		||||
%package{Slic3r::XS};
 | 
			
		||||
 | 
			
		||||
%{
 | 
			
		||||
#include <myinit.h>
 | 
			
		||||
%}
 | 
			
		||||
							
								
								
									
										0
									
								
								xs/xsp/mytype.map
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								xs/xsp/mytype.map
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										2
									
								
								xs/xsp/typemap.xspt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								xs/xsp/typemap.xspt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
%typemap{std::string}{simple};
 | 
			
		||||
%typemap{std::string&}{reference};
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue