Fix destructors

This commit is contained in:
Alessandro Ranellucci 2013-07-07 16:51:02 +02:00
parent b66a796f0b
commit f4db7625bc
3 changed files with 9 additions and 7 deletions

View File

@ -21,21 +21,20 @@ class ExPolygon
SV* arrayref();
};
Polygon*
perl2polygon(SV* poly_sv)
void
perl2polygon(SV* poly_sv, Polygon& poly)
{
AV* poly_av = (AV*)SvRV(poly_sv);
const unsigned int num_points = av_len(poly_av)+1;
Polygon* retval = new Polygon(num_points);
poly.resize(num_points);
for (unsigned int i = 0; i < num_points; i++) {
SV** point_sv = av_fetch(poly_av, i, 0);
AV* point_av = (AV*)SvRV(*point_sv);
Point& p = (*retval)[i];
Point& p = poly[i];
p.x = (unsigned long)SvIV(*av_fetch(point_av, 0, 0));
p.y = (unsigned long)SvIV(*av_fetch(point_av, 1, 0));
}
return retval;
}
SV*

View File

@ -6,6 +6,7 @@
%}
%name{Slic3r::ExPolygon::XS} class ExPolygon {
~ExPolygon();
%{
ExPolygon*
@ -13,9 +14,10 @@ ExPolygon::new(...)
CODE:
RETVAL = new ExPolygon ();
// ST(0) is class name, ST(1) is contour and others are holes
RETVAL->contour = *perl2polygon(ST(1));
perl2polygon(ST(1), RETVAL->contour);
RETVAL->holes.resize(items-2);
for (unsigned int i = 2; i < items; i++) {
RETVAL->holes.push_back(*perl2polygon(ST(i)));
perl2polygon(ST(i), RETVAL->holes[i-2]);
}
OUTPUT:
RETVAL

View File

@ -7,6 +7,7 @@
%name{Slic3r::Point::XS} class Point {
Point(unsigned long _x = 0, unsigned long _y = 0);
~Point();
%{
SV*