diff --git a/t/freeze.t b/t/freeze.t index f48cf04c8f..07fd020d29 100644 --- a/t/freeze.t +++ b/t/freeze.t @@ -16,12 +16,13 @@ use Time::HiRes qw(gettimeofday tv_interval); my $t0 = [gettimeofday]; my $print = Slic3r::Test::init_print('20mm_cube', scale => 2); my $gcode = Slic3r::Test::gcode($print); - diag sprintf 'Slicing took %s seconds', tv_interval($t0); + ###diag sprintf 'Slicing took %s seconds', tv_interval($t0); my $t1 = [gettimeofday]; nstore $print, 'print.dat'; $print = retrieve 'print.dat'; - diag sprintf 'Freezing and retrieving took %s seconds', tv_interval($t1); + unlink 'print.dat'; + ###diag sprintf 'Freezing and retrieving took %s seconds', tv_interval($t1); isa_ok $print, 'Slic3r::Print', 'restored Print object'; } diff --git a/xs/src/ExPolygon.hpp b/xs/src/ExPolygon.hpp index c5218dd48e..497843dd86 100644 --- a/xs/src/ExPolygon.hpp +++ b/xs/src/ExPolygon.hpp @@ -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* diff --git a/xs/xsp/ExPolygon.xsp b/xs/xsp/ExPolygon.xsp index e4281046e9..62c421ccef 100644 --- a/xs/xsp/ExPolygon.xsp +++ b/xs/xsp/ExPolygon.xsp @@ -7,6 +7,7 @@ %name{Slic3r::ExPolygon::XS} class ExPolygon { %name{_clone} ExPolygon(ExPolygon& self); + ~ExPolygon(); %{ ExPolygon* @@ -14,9 +15,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 diff --git a/xs/xsp/Point.xsp b/xs/xsp/Point.xsp index 372d1edd07..ef18931fe3 100644 --- a/xs/xsp/Point.xsp +++ b/xs/xsp/Point.xsp @@ -7,6 +7,7 @@ %name{Slic3r::Point::XS} class Point { Point(unsigned long _x = 0, unsigned long _y = 0); + ~Point(); %{ SV*