Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/xs
diff options
context:
space:
mode:
authorAlessandro Ranellucci <aar@cpan.org>2013-06-23 17:33:07 +0400
committerAlessandro Ranellucci <aar@cpan.org>2013-06-23 17:33:07 +0400
commit37105e8237272565b60550c41945b3c41b11a9d9 (patch)
tree746a4445f083ce7892b956d23f9b47837bc99999 /xs
parentff795f29189c4c7b54c9aceb93deca8a4f351a7f (diff)
Ported get_layer_range() to C
Diffstat (limited to 'xs')
-rw-r--r--xs/MANIFEST4
-rw-r--r--xs/buildtmp/XS.c236
-rw-r--r--xs/buildtmp/XS.obin5468 -> 0 bytes
-rw-r--r--xs/buildtmp/main.xs27
-rw-r--r--xs/buildtmp/typemap429
-rw-r--r--xs/lib/Slic3r/TriangleMesh/XS.pm10
-rw-r--r--xs/t/02_object.t12
-rw-r--r--xs/xsp/Object.xsp49
-rw-r--r--xs/xsp/TriangleMesh.xsp2
-rw-r--r--xs/xsp/XS.xsp4
-rw-r--r--xs/xsp/my.map1
-rw-r--r--xs/xsp/typemap.xspt3
12 files changed, 70 insertions, 707 deletions
diff --git a/xs/MANIFEST b/xs/MANIFEST
index a473c6c89..43e2324d1 100644
--- a/xs/MANIFEST
+++ b/xs/MANIFEST
@@ -1,11 +1,13 @@
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
+t/02_object.t
+xsp/my.map
xsp/mytype.map
+xsp/Object.xsp
xsp/TriangleMesh.xsp
xsp/typemap.xspt
xsp/XS.xsp
diff --git a/xs/buildtmp/XS.c b/xs/buildtmp/XS.c
deleted file mode 100644
index f6ebb8445..000000000
--- a/xs/buildtmp/XS.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * 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;
-}
-
diff --git a/xs/buildtmp/XS.o b/xs/buildtmp/XS.o
deleted file mode 100644
index 6dd21b68e..000000000
--- a/xs/buildtmp/XS.o
+++ /dev/null
Binary files differ
diff --git a/xs/buildtmp/main.xs b/xs/buildtmp/main.xs
deleted file mode 100644
index a1aeb8023..000000000
--- a/xs/buildtmp/main.xs
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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
-
diff --git a/xs/buildtmp/typemap b/xs/buildtmp/typemap
deleted file mode 100644
index d2f0eb576..000000000
--- a/xs/buildtmp/typemap
+++ /dev/null
@@ -1,429 +0,0 @@
-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));
- }
diff --git a/xs/lib/Slic3r/TriangleMesh/XS.pm b/xs/lib/Slic3r/TriangleMesh/XS.pm
deleted file mode 100644
index 7d8296cd5..000000000
--- a/xs/lib/Slic3r/TriangleMesh/XS.pm
+++ /dev/null
@@ -1,10 +0,0 @@
-package Slic3r::TriangleMesh::XS;
-use warnings;
-use strict;
-
-our $VERSION = '0.01';
-
-use XSLoader;
-XSLoader::load(__PACKAGE__, $VERSION);
-
-1;
diff --git a/xs/t/02_object.t b/xs/t/02_object.t
new file mode 100644
index 000000000..d9b2b85dc
--- /dev/null
+++ b/xs/t/02_object.t
@@ -0,0 +1,12 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Slic3r::XS;
+use Test::More tests => 1;
+
+is_deeply Slic3r::Object::XS::get_layer_range([ 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 ], 39, 69),
+ [2, 6], 'get_layer_range';
+
+__END__
diff --git a/xs/xsp/Object.xsp b/xs/xsp/Object.xsp
new file mode 100644
index 000000000..9a8168d4f
--- /dev/null
+++ b/xs/xsp/Object.xsp
@@ -0,0 +1,49 @@
+%module{Slic3r::XS};
+%package{Slic3r::Object::XS};
+
+#include <list>
+#include <vector>
+
+%{
+PROTOTYPES: DISABLE
+
+std::vector<unsigned int>
+get_layer_range(z_array, min_z, max_z)
+ std::vector<unsigned int>* z_array;
+ unsigned int min_z;
+ unsigned int max_z;
+ CODE:
+ RETVAL.resize(2);
+
+ unsigned int bottom = 0;
+ unsigned int top = z_array->size()-1;
+ while (1) {
+ unsigned int mid = bottom + floor((top - bottom)/2.0);
+ if (mid == top || mid == bottom) {
+ RETVAL[0] = mid;
+ break;
+ }
+ if ((*z_array)[mid] > min_z) {
+ top = mid;
+ } else {
+ bottom = mid;
+ }
+ }
+ top = z_array->size()-1;
+ while (1) {
+ unsigned int mid = bottom + ceil((top - bottom)/2.0);
+ if (mid == top || mid == bottom) {
+ RETVAL[1] = mid;
+ break;
+ }
+ if ((*z_array)[mid] < max_z) {
+ bottom = mid;
+ } else {
+ top = mid;
+ }
+ }
+ delete z_array;
+ OUTPUT:
+ RETVAL
+
+%}
diff --git a/xs/xsp/TriangleMesh.xsp b/xs/xsp/TriangleMesh.xsp
index a696f02b2..be6b31df6 100644
--- a/xs/xsp/TriangleMesh.xsp
+++ b/xs/xsp/TriangleMesh.xsp
@@ -1,4 +1,4 @@
-%module{Slic3r::TriangleMesh::XS};
+%module{Slic3r::XS};
%package{Slic3r::TriangleMesh::XS};
%{
diff --git a/xs/xsp/XS.xsp b/xs/xsp/XS.xsp
index 9db230b07..f14af9433 100644
--- a/xs/xsp/XS.xsp
+++ b/xs/xsp/XS.xsp
@@ -1,6 +1,8 @@
%module{Slic3r::XS};
%package{Slic3r::XS};
-%{
#include <myinit.h>
+
+%{
+
%}
diff --git a/xs/xsp/my.map b/xs/xsp/my.map
new file mode 100644
index 000000000..ad7868c92
--- /dev/null
+++ b/xs/xsp/my.map
@@ -0,0 +1 @@
+std::map<uint32_t, uint32_t>* T_PTR
diff --git a/xs/xsp/typemap.xspt b/xs/xsp/typemap.xspt
index 0f97dcebb..15a95c239 100644
--- a/xs/xsp/typemap.xspt
+++ b/xs/xsp/typemap.xspt
@@ -1,2 +1 @@
-%typemap{std::string}{simple};
-%typemap{std::string&}{reference};
+%typemap{std::string};