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(); SV* arrayref();
}; };
Polygon* void
perl2polygon(SV* poly_sv) perl2polygon(SV* poly_sv, Polygon& poly)
{ {
AV* poly_av = (AV*)SvRV(poly_sv); AV* poly_av = (AV*)SvRV(poly_sv);
const unsigned int num_points = av_len(poly_av)+1; 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++) { for (unsigned int i = 0; i < num_points; i++) {
SV** point_sv = av_fetch(poly_av, i, 0); SV** point_sv = av_fetch(poly_av, i, 0);
AV* point_av = (AV*)SvRV(*point_sv); 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.x = (unsigned long)SvIV(*av_fetch(point_av, 0, 0));
p.y = (unsigned long)SvIV(*av_fetch(point_av, 1, 0)); p.y = (unsigned long)SvIV(*av_fetch(point_av, 1, 0));
} }
return retval;
} }
SV* SV*

View File

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

View File

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