8000 Applied patch by James Evans for better C++/C compliance (for MSVC an… · matplotlib/matplotlib@953128b · GitHub
[go: up one dir, main page]

Skip to content

Commit 953128b

Browse files
committed
Applied patch by James Evans for better C++/C compliance (for MSVC and g++ --pedantic). -ADS
svn path=/trunk/matplotlib/; revision=2141
1 parent 7a28d0f commit 953128b

File tree

3 files changed

+70
-42
lines changed

3 files changed

+70
-42
lines changed

src/_backend_agg.cpp

Lines changed: 59 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -379,10 +379,10 @@ RendererAgg::draw_polygon(const Py::Tuple& args) {
379379
return Py::Object();
380380

381381

382-
// dump the x.y vertices into a double array for faster look ahread
382+
// dump the x.y vertices into a double array for faster look ahead
383383
// and behind access
384-
double xs[Npoints];
385-
double ys[Npoints];
384+
double *xs = new double[Npoints];
385+
double *ys = new double[Npoints];
386386

387387
for (size_t i=0; i<Npoints; i++) {
388388
Py::SeqBase<Py::Object> xy(points[i]);
@@ -406,6 +406,10 @@ RendererAgg::draw_polygon(const Py::Tuple& args) {
406406
path.close_polygon();
407407

408408
_fill_and_stroke(path, gc, face, false);
409+
410+
delete [] xs;
411+
delete [] ys;
412+
409413
_VERBOSE("RendererAgg::draw_polygon DONE");
410414
return Py::Object();
411415

@@ -960,10 +964,10 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
960964
double xo = Py::Float(pos[0]);
961965
double yo = Py::Float(pos[1]);
962966
try {
963-
xyo = transOffset->operator()(xo, yo);
967+
xyo = transOffset->operator()(xo, yo);
964968
}
965969
catch (...) {
966-
throw Py::ValueError("Domain error on transOffset->operator in draw_line_collection");
970+
throw Py::ValueError("Domain error on transOffset->operator in draw_line_collection");
967971
}
968972

969973
}
@@ -976,22 +980,25 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
976980

977981
// dump the verts to double arrays so we can do more efficient
978982
// look aheads and behinds when doing snapto pixels
979-
double xs[Nverts], ys[Nverts];
983+
double *xs = new double[Nverts];
984+
double *ys = new double[Nverts];
980985
for (size_t j=0; j<Nverts; j++) {
981986
thisvert = thisverts[j];
982987
double x = Py::Float(thisvert[0]);
983988
double y = Py::Float(thisvert[1]);
984989
try {
985-
xy = transform->operator()(x, y);
990+
xy = transform->operator()(x, y);
986991
}
987992
catch(...) {
988-
throw Py::ValueError("Domain error on eval_scalars in RendererAgg::draw_poly_collection");
993+
delete [] xs;
994+
delete [] ys;
995+
throw Py::ValueError("Domain error on eval_scalars in RendererAgg::draw_poly_collection");
989996
}
990997

991998

992999
if (usingOffsets) {
993-
xy.first += xyo.first;
994-
xy.second += xyo.second;
1000+
xy.first += xyo.first;
1001+
xy.second += xyo.second;
9951002
}
9961003

9971004
xy.second = height - xy.second;
@@ -1006,21 +1013,21 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
10061013
double y = ys[j];
10071014

10081015
if (j==0) {
1009-
if (xs[j] == xs[Nverts-1]) x = (int)xs[j] + 0.5;
1010-
if (ys[j] == ys[Nverts-1]) y = (int)ys[j] + 0.5;
1016+
if (xs[j] == xs[Nverts-1]) x = (int)xs[j] + 0.5;
1017+
if (ys[j] == ys[Nverts-1]) y = (int)ys[j] + 0.5;
10111018
}
10121019
else if (j==Nverts-1) {
1013-
if (xs[j] == xs[0]) x = (int)xs[j] + 0.5;
1014-
if (ys[j] == ys[0]) y = (int)ys[j] + 0.5;
1020+
if (xs[j] == xs[0]) x = (int)xs[j] + 0.5;
1021+
if (ys[j] == ys[0]) y = (int)ys[j] + 0.5;
10151022
}
10161023

10171024
if (j < Nverts-1) {
1018-
if (xs[j] == xs[j+1]) x = (int)xs[j] + 0.5;
1019-
if (ys[j] == ys[j+1]) y = (int)ys[j] + 0.5;
1025+
if (xs[j] == xs[j+1]) x = (int)xs[j] + 0.5;
1026+
if (ys[j] == ys[j+1]) y = (int)ys[j] + 0.5;
10201027
}
10211028
if (j>0) {
1022-
if (xs[j] == xs[j-1]) x = (int)xs[j] + 0.5;
1023-
if (ys[j] == ys[j-1]) y = (int)ys[j] + 0.5;
1029+
if (xs[j] == xs[j-1]) x = (int)xs[j] + 0.5;
1030+
if (ys[j] == ys[j-1]) y = (int)ys[j] + 0.5;
10241031
}
10251032

10261033
if (j==0) path.move_to(x,y);
@@ -1041,12 +1048,12 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
10411048
theRasterizer->add_path(path);
10421049

10431050
if (isaa) {
1044-
rendererAA->color(facecolor);
1045-
agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA);
1051+
rendererAA->color(facecolor);
1052+
agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA);
10461053
}
10471054
else {
1048-
rendererBin->color(facecolor);
1049-
agg::render_scanlines(*theRasterizer, *slineBin, *rendererBin);
1055+
rendererBin->color(facecolor);
1056+
agg::render_scanlines(*theRasterizer, *slineBin, *rendererBin);
10501057
}
10511058
} //renderer face
10521059

@@ -1069,15 +1076,18 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
10691076

10701077
// render antialiased or not
10711078
if ( isaa ) {
1072-
rendererAA->color(edgecolor);
1073-
agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA);
1079+
rendererAA->color(edgecolor);
1080+
agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA);
10741081
}
10751082
else {
1076-
rendererBin->color(edgecolor);
1077-
agg::render_scanlines(*theRasterizer, *slineBin, *rendererBin);
1083+
rendererBin->color(edgecolor);
1084+
agg::render_scanlines(*theRasterizer, *slineBin, *rendererBin);
10781085
}
10791086
} //rendered edge
10801087

1088+
delete [] xs;
1089+
delete [] ys;
1090+
10811091
} // for every poly
10821092
return Py::Object();
10831093
}
@@ -1127,8 +1137,8 @@ RendererAgg::draw_regpoly_collection(const Py::Tuple& args) {
11271137
double thisx, thisy;
11281138

11291139
// dump the x.y vertices into a double array for faster access
1130-
double xverts[Nverts];
1131-
double yverts[Nverts];
1140+
double *xverts = new double[Nverts];
1141+
double *yverts = new double[Nverts];
11321142
Py::SeqBase<Py::Object> xy;
11331143
for (size_t i=0; i<Nverts; i++) {
11341144
xy = Py::SeqBase<Py::Object>(verts[i]);
@@ -1145,6 +1155,8 @@ RendererAgg::draw_regpoly_collection(const Py::Tuple& args) {
11451155
offsetPair = transOffset->operator()(xo, yo);
11461156
}
11471157
catch(...) {
1158+
delete [] xverts;
1159+
delete [] yverts;
11481160
throw Py::ValueError("Domain error on eval_scalars in RendererAgg::draw_regpoly_collection");
11491161
}
11501162

@@ -1178,12 +1190,12 @@ RendererAgg::draw_regpoly_collection(const Py::Tuple& args) {
11781190
theRasterizer->add_path(path);
11791191

11801192
if (isaa) {
1181-
rendererAA->color(facecolor);
1182-
agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA);
1193+
rendererAA->color(facecolor);
1194+
agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA);
11831195
}
11841196
else {
1185-
rendererBin->color(facecolor);
1186-
agg::render_scanlines(*theRasterizer, *slineBin, *rendererBin);
1197+
rendererBin->color(facecolor);
1198+
agg::render_scanlines(*theRasterizer, *slineBin, *rendererBin);
11871199
}
11881200
} //renderer face
11891201

@@ -1205,16 +1217,18 @@ RendererAgg::draw_regpoly_collection(const Py::Tuple& args) {
12051217

12061218
// render antialiased or not
12071219
if ( isaa ) {
1208-
rendererAA->color(edgecolor);
1209-
agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA);
1220+
rendererAA->color(edgecolor);
1221+
agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA);
12101222
}
12111223
else {
1212-
rendererBin->color(edgecolor);
1213-
agg::render_scanlines(*theRasterizer, *slineBin, *rendererBin);
1224+
rendererBin->color(edgecolor);
1225+
agg::render_scanlines(*theRasterizer, *slineBin, *rendererBin);
12141226
}
12151227
} //rendered edge
12161228

12171229
} // for every poly
1230+
delete [] xverts;
1231+
delete [] yverts;
12181232
return Py::Object();
12191233
}
12201234

@@ -1355,7 +1369,7 @@ RendererAgg::_render_lines_path(PathSource &path, const GCAgg& gc) {
13551369

13561370
//path_t transpath(path, xytrans);
13571371

1358-
if (gc.dasha==NULL ) { //no dashes
1372+
if (gc.dasha==NULL ) { //no dashes
13591373
stroke_t stroke(path);
13601374
stroke.width(gc.linewidth);
13611375
stroke.line_cap(gc.cap);
@@ -1920,32 +1934,37 @@ RendererAgg::write_png(const Py::Tuple& args)
19201934
struct png_color_8_struct sig_bit;
19211935
png_uint_32 row;
19221936

1923-
png_bytep row_pointers[height];
1937+
png_bytep *row_pointers = new png_bytep[height];
19241938
for (row = 0; row < height; ++row) {
19251939
row_pointers[row] = pixBuffer + row * width * 4;
19261940
}
19271941

19281942

1929-
if (fp == NULL)
1943+
if (fp == NULL) {
1944+
delete [] row_pointers;
19301945
throw Py::RuntimeError("Could not open file");
1946+
}
19311947

19321948

19331949
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
19341950
if (png_ptr == NULL) {
19351951
if (fpclose) fclose(fp);
1952+
delete [] row_pointers;
19361953
throw Py::RuntimeError("Could not create write struct");
19371954
}
19381955

19391956
info_ptr = png_create_info_struct(png_ptr);
19401957
if (info_ptr == NULL) {
19411958
if (fpclose) fclose(fp);
19421959
png_destroy_write_struct(&png_ptr, &info_ptr);
1960+
delete [] row_pointers;
19431961
throw Py::RuntimeError("Could not create info struct");
19441962
}
19451963

19461964
if (setjmp(png_ptr->jmpbuf)) {
19471965
if (fpclose) fclose(fp);
19481966
png_destroy_write_struct(&png_ptr, &info_ptr);
1967+
delete [] row_pointers;
19491968
throw Py::RuntimeError("Error building image");
19501969
}
19511970

@@ -1975,6 +1994,7 @@ RendererAgg::write_png(const Py::Tuple& args)
19751994

19761995
png_destroy_write_struct(&png_ptr, &info_ptr);
19771996

1997+
delete [] row_pointers;
19781998

19791999
if (fpclose) fclose(fp);
19802000

src/_image.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,13 +629,15 @@ Image::write_png(const Py::Tuple& args)
629629
png_uint_32 row=0;
630630

631631
//todo: allocate on heap
632-
png_bytep row_pointers[rowsOut];
632+
png_bytep *row_pointers = new png_bytep[rowsOut];
633+
633634
for (row = 0; row < rowsOut; ++row)
634635
row_pointers[row] = bufpair.first + row * colsOut * 4;
635636

636637
fp = fopen(file_name, "wb");
637638
if (fp == NULL) {
638639
if (bufpair.second) delete [] bufpair.first;
640+
delete [] row_pointers;
639641
throw Py::RuntimeError(Printf("Could not open file %s", file_name).str());
640642
}
641643

@@ -644,6 +646,7 @@ Image::write_png(const Py::Tuple& args)
644646
if (png_ptr == NULL) {
645647
if (bufpair.second) delete [] bufpair.first;
646648
fclose(fp);
649+
delete [] row_pointers;
647650
throw Py::RuntimeError("Could not create write struct");
648651
}
649652

@@ -652,13 +655,15 @@ Image::write_png(const Py::Tuple& args)
652655
if (bufpair.second) delete [] bufpair.first;
653656
fclose(fp);
654657
png_destroy_write_struct(&png_ptr, &info_ptr);
658+
delete [] row_pointers;
655659
throw Py::RuntimeError("Could not create info struct");
656660
}
657661

658662
if (setjmp(png_ptr->jmpbuf)) {
659663
if (bufpair.second) delete [] bufpair.first;
660664
fclose(fp);
661665
png_destroy_write_struct(&png_ptr, &info_ptr);
666+
delete [] row_pointers;
662667
throw Py::RuntimeError("Error building image");
663668
}
664669

@@ -683,6 +688,8 @@ Image::write_png(const Py::Tuple& args)
683688
png_destroy_write_struct(&png_ptr, &info_ptr);
684689
fclose(fp);
685690

691+
delete [] row_pointers;
692+
686693
if (bufpair.second) delete [] bufpair.first;
687694
return Py::Object();
688695
}
@@ -886,7 +893,7 @@ _image_module::readpng(const Py::Tuple& args) {
886893
if (setjmp(png_jmpbuf(png_ptr)))
887894
throw Py::RuntimeError("_image_module::readpng: error during read_image");
888895

889-
png_bytep row_pointers[height];
896+
png_bytep *row_pointers = new png_bytep[height];
890897

891898
for (png_uint_32 row = 0; row < height; row++)
892899
row_pointers[row] = new png_byte[png_get_rowbytes(png_ptr,info_ptr)];
@@ -923,6 +930,7 @@ _image_module::readpng(const Py::Tuple& args) {
923930
fclose(fp);
924931
for (png_uint_32 row = 0; row < height; row++)
925932
delete [] row_pointers[row];
933+
delete [] row_pointers;
926934
return Py::asObject((PyObject*)A);
927935
}
928936

src/cntr.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1548,13 +1548,13 @@ Cntr_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
15481548
static int
15491549
Cntr_init(Cntr *self, PyObject *args, PyObject *kwds)
15501550
{
1551+
static char *kwlist[] = {"x", "y", "z", "mask", NULL};
15511552
PyObject *xarg, *yarg, *zarg, *marg;
15521553
PyArrayObject *xpa, *ypa, *zpa, *mpa;
15531554
long iMax, jMax;
15541555
char *mask;
15551556

15561557
marg = NULL;
1557-
static char *kwlist[] = {"x", "y", "z", "mask", NULL};
15581558

15591559
if (! PyArg_ParseTupleAndKeywords(args, kwds, "OOO|O", kwlist,
15601560
&xarg, &yarg, &zarg, &marg))

0 commit comments

Comments
 (0)
0