[gimp] app, plug-ins: Don't modify iter->length
- From: Daniel Sabo <daniels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app, plug-ins: Don't modify iter->length
- Date: Fri, 13 Sep 2013 00:45:12 +0000 (UTC)
commit 34c50b0feaa63e9df9d2cce5d6d1d54c057c8b9e
Author: Daniel Sabo <DanielSabo gmail com>
Date: Thu Sep 12 17:39:59 2013 -0700
app, plug-ins: Don't modify iter->length
The new by-row iteration doesn't re-write the length
value for each row. In general it is not safe to modify
the iterator data because the internal logic depends
on the public data, but this specific case is new.
app/core/gimpdrawable-blend.c | 5 ++-
app/core/gimphistogram.c | 19 ++++++------
app/core/gimpimage-contiguous-region.c | 7 ++--
app/core/gimpimage-convert-type.c | 25 +++++++++-------
app/core/gimppalette-import.c | 3 +-
app/gegl/gimp-gegl-loops.c | 50 ++++++++++++++++++-------------
app/gegl/gimp-gegl-mask-combine.c | 9 ++++--
plug-ins/common/file-png.c | 15 ++++++----
8 files changed, 77 insertions(+), 56 deletions(-)
---
diff --git a/app/core/gimpdrawable-blend.c b/app/core/gimpdrawable-blend.c
index 1e377e1..e34f4c0 100644
--- a/app/core/gimpdrawable-blend.c
+++ b/app/core/gimpdrawable-blend.c
@@ -631,9 +631,10 @@ gradient_precalc_shapeburst (GimpImage *image,
while (gegl_buffer_iterator_next (iter))
{
- gfloat *data = iter->data[0];
+ gint count = iter->length;
+ gfloat *data = iter->data[0];
- while (iter->length--)
+ while (count--)
*data++ /= max_iteration;
}
}
diff --git a/app/core/gimphistogram.c b/app/core/gimphistogram.c
index a13067d..5143e0e 100644
--- a/app/core/gimphistogram.c
+++ b/app/core/gimphistogram.c
@@ -330,7 +330,8 @@ gimp_histogram_calculate (GimpHistogram *histogram,
while (gegl_buffer_iterator_next (iter))
{
- const gfloat *data = iter->data[0];
+ const gfloat *data = iter->data[0];
+ gint length = iter->length;
gfloat max;
if (mask)
@@ -340,7 +341,7 @@ gimp_histogram_calculate (GimpHistogram *histogram,
switch (n_components)
{
case 1:
- while (iter->length--)
+ while (length--)
{
const gdouble masked = *mask_data;
@@ -352,7 +353,7 @@ gimp_histogram_calculate (GimpHistogram *histogram,
break;
case 2:
- while (iter->length--)
+ while (length--)
{
const gdouble masked = *mask_data;
const gdouble weight = data[1];
@@ -366,7 +367,7 @@ gimp_histogram_calculate (GimpHistogram *histogram,
break;
case 3: /* calculate separate value values */
- while (iter->length--)
+ while (length--)
{
const gdouble masked = *mask_data;
@@ -385,7 +386,7 @@ gimp_histogram_calculate (GimpHistogram *histogram,
break;
case 4: /* calculate separate value values */
- while (iter->length--)
+ while (length--)
{
const gdouble masked = *mask_data;
const gdouble weight = data[3];
@@ -411,7 +412,7 @@ gimp_histogram_calculate (GimpHistogram *histogram,
switch (n_components)
{
case 1:
- while (iter->length--)
+ while (length--)
{
VALUE (0, data[0]) += 1.0;
@@ -420,7 +421,7 @@ gimp_histogram_calculate (GimpHistogram *histogram,
break;
case 2:
- while (iter->length--)
+ while (length--)
{
const gdouble weight = data[1];
@@ -432,7 +433,7 @@ gimp_histogram_calculate (GimpHistogram *histogram,
break;
case 3: /* calculate separate value values */
- while (iter->length--)
+ while (length--)
{
VALUE (1, data[0]) += 1.0;
VALUE (2, data[1]) += 1.0;
@@ -448,7 +449,7 @@ gimp_histogram_calculate (GimpHistogram *histogram,
break;
case 4: /* calculate separate value values */
- while (iter->length--)
+ while (length--)
{
const gdouble weight = data[3];
diff --git a/app/core/gimpimage-contiguous-region.c b/app/core/gimpimage-contiguous-region.c
index 2309975..459d071 100644
--- a/app/core/gimpimage-contiguous-region.c
+++ b/app/core/gimpimage-contiguous-region.c
@@ -217,10 +217,11 @@ gimp_image_contiguous_region_by_color (GimpImage *image,
while (gegl_buffer_iterator_next (iter))
{
- const gfloat *src = iter->data[0];
- gfloat *dest = iter->data[1];
+ const gfloat *src = iter->data[0];
+ gfloat *dest = iter->data[1];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
/* Find how closely the colors match */
*dest = pixel_difference (start_col, src,
diff --git a/app/core/gimpimage-convert-type.c b/app/core/gimpimage-convert-type.c
index 2cb18e5..38de0cd 100644
--- a/app/core/gimpimage-convert-type.c
+++ b/app/core/gimpimage-convert-type.c
@@ -690,11 +690,12 @@ remap_indexed_layer (GimpLayer *layer,
while (gegl_buffer_iterator_next (iter))
{
- guchar *data = iter->data[0];
+ guchar *data = iter->data[0];
+ gint length = iter->length;
if (has_alpha)
{
- while (iter->length--)
+ while (length--)
{
if (data[ALPHA_I])
data[INDEXED] = remap_table[data[INDEXED]];
@@ -704,7 +705,7 @@ remap_indexed_layer (GimpLayer *layer,
}
else
{
- while (iter->length--)
+ while (length--)
{
data[INDEXED] = remap_table[data[INDEXED]];
@@ -1152,11 +1153,12 @@ generate_histogram_gray (CFHistogram histogram,
while (gegl_buffer_iterator_next (iter))
{
- const guchar *data = iter->data[0];
+ const guchar *data = iter->data[0];
+ gint length = iter->length;
if (has_alpha)
{
- while (iter->length--)
+ while (length--)
{
if (data[ALPHA_G] > 127)
histogram[*data]++;
@@ -1166,7 +1168,7 @@ generate_histogram_gray (CFHistogram histogram,
}
else
{
- while (iter->length--)
+ while (length--)
{
histogram[*data]++;
@@ -1224,9 +1226,10 @@ generate_histogram_rgb (CFHistogram histogram,
while (gegl_buffer_iterator_next (iter))
{
- const guchar *data = iter->data[0];
+ const guchar *data = iter->data[0];
+ gint length = iter->length;
- total_size += iter->length;
+ total_size += length;
/* g_printerr (" [%d,%d - %d,%d]", srcPR.x, src_roi->y, offsetx, offsety); */
@@ -1241,7 +1244,7 @@ generate_histogram_rgb (CFHistogram histogram,
coledge = col + roi->width;
row = roi->y + offsety;
- while (iter->length--)
+ while (length--)
{
gboolean transparent = FALSE;
@@ -1271,7 +1274,7 @@ generate_histogram_rgb (CFHistogram histogram,
}
else
{
- while (iter->length--)
+ while (length--)
{
if ((has_alpha && ((data[ALPHA] > 127)))
|| (!has_alpha))
@@ -1294,7 +1297,7 @@ generate_histogram_rgb (CFHistogram histogram,
coledge = col + roi->width;
row = roi->y + offsety;
- while (iter->length--)
+ while (length--)
{
gboolean transparent = FALSE;
diff --git a/app/core/gimppalette-import.c b/app/core/gimppalette-import.c
index 8280425..8e19914 100644
--- a/app/core/gimppalette-import.c
+++ b/app/core/gimppalette-import.c
@@ -311,11 +311,12 @@ gimp_palette_import_extract (GimpImage *image,
{
const guchar *data = iter->data[0];
const guchar *mask_data = NULL;
+ gint length = iter->length;
if (mask_roi)
mask_data = iter->data[1];
- while (iter->length--)
+ while (length--)
{
/* ignore unselected, and completely transparent pixels */
if ((! mask_data || *mask_data) && data[ALPHA])
diff --git a/app/gegl/gimp-gegl-loops.c b/app/gegl/gimp-gegl-loops.c
index 2225aa4..2ed3673 100644
--- a/app/gegl/gimp-gegl-loops.c
+++ b/app/gegl/gimp-gegl-loops.c
@@ -235,10 +235,11 @@ gimp_gegl_dodgeburn (GeglBuffer *src_buffer,
while (gegl_buffer_iterator_next (iter))
{
- gfloat *src = iter->data[0];
- gfloat *dest = iter->data[1];
+ gfloat *src = iter->data[0];
+ gfloat *dest = iter->data[1];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
*dest++ = *src++ * factor;
*dest++ = *src++ * factor;
@@ -257,10 +258,11 @@ gimp_gegl_dodgeburn (GeglBuffer *src_buffer,
while (gegl_buffer_iterator_next (iter))
{
- gfloat *src = iter->data[0];
- gfloat *dest = iter->data[1];
+ gfloat *src = iter->data[0];
+ gfloat *dest = iter->data[1];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
*dest++ = pow (*src++, factor);
*dest++ = pow (*src++, factor);
@@ -279,10 +281,11 @@ gimp_gegl_dodgeburn (GeglBuffer *src_buffer,
while (gegl_buffer_iterator_next (iter))
{
- gfloat *src = iter->data[0];
- gfloat *dest = iter->data[1];
+ gfloat *src = iter->data[0];
+ gfloat *dest = iter->data[1];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
if (exposure >= 0)
{
@@ -357,10 +360,11 @@ gimp_gegl_smudge_blend (GeglBuffer *top_buffer,
const gfloat *top = iter->data[0];
const gfloat *bottom = iter->data[1];
gfloat *dest = iter->data[2];
+ gint count = iter->length;
const gfloat blend1 = 1.0 - blend;
const gfloat blend2 = blend;
- while (iter->length--)
+ while (count--)
{
const gfloat a1 = blend1 * bottom[3];
const gfloat a2 = blend2 * top[3];
@@ -407,10 +411,11 @@ gimp_gegl_apply_mask (GeglBuffer *mask_buffer,
while (gegl_buffer_iterator_next (iter))
{
- const gfloat *mask = iter->data[0];
- gfloat *dest = iter->data[1];
+ const gfloat *mask = iter->data[0];
+ gfloat *dest = iter->data[1];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
dest[3] *= *mask * opacity;
@@ -439,10 +444,11 @@ gimp_gegl_combine_mask (GeglBuffer *mask_buffer,
while (gegl_buffer_iterator_next (iter))
{
- const gfloat *mask = iter->data[0];
- gfloat *dest = iter->data[1];
+ const gfloat *mask = iter->data[0];
+ gfloat *dest = iter->data[1];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
*dest *= *mask * opacity;
@@ -472,12 +478,13 @@ gimp_gegl_combine_mask_weird (GeglBuffer *mask_buffer,
while (gegl_buffer_iterator_next (iter))
{
- const gfloat *mask = iter->data[0];
- gfloat *dest = iter->data[1];
+ const gfloat *mask = iter->data[0];
+ gfloat *dest = iter->data[1];
+ gint count = iter->length;
if (stipple)
{
- while (iter->length--)
+ while (count--)
{
dest[0] += (1.0 - dest[0]) * *mask * opacity;
@@ -487,7 +494,7 @@ gimp_gegl_combine_mask_weird (GeglBuffer *mask_buffer,
}
else
{
- while (iter->length--)
+ while (count--)
{
if (opacity > dest[0])
dest[0] += (opacity - dest[0]) * *mask * opacity;
@@ -535,8 +542,9 @@ gimp_gegl_replace (GeglBuffer *top_buffer,
const gfloat *bottom = iter->data[1];
const gfloat *mask = iter->data[2];
gfloat *dest = iter->data[3];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
gint b;
gdouble mask_val = *mask * opacity;
diff --git a/app/gegl/gimp-gegl-mask-combine.c b/app/gegl/gimp-gegl-mask-combine.c
index 6fcf3a2..8ecb064 100644
--- a/app/gegl/gimp-gegl-mask-combine.c
+++ b/app/gegl/gimp-gegl-mask-combine.c
@@ -413,8 +413,9 @@ gimp_gegl_mask_combine_buffer (GeglBuffer *mask,
{
gfloat *mask_data = iter->data[0];
const gfloat *add_on_data = iter->data[1];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
const gfloat val = *mask_data + *add_on_data;
@@ -431,8 +432,9 @@ gimp_gegl_mask_combine_buffer (GeglBuffer *mask,
{
gfloat *mask_data = iter->data[0];
const gfloat *add_on_data = iter->data[1];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
if (*add_on_data > *mask_data)
*mask_data = 0.0;
@@ -450,8 +452,9 @@ gimp_gegl_mask_combine_buffer (GeglBuffer *mask,
{
gfloat *mask_data = iter->data[0];
const gfloat *add_on_data = iter->data[1];
+ gint count = iter->length;
- while (iter->length--)
+ while (count--)
{
*mask_data = MIN (*mask_data, *add_on_data);
diff --git a/plug-ins/common/file-png.c b/plug-ins/common/file-png.c
index 13d7ccb..f6f8a60 100644
--- a/plug-ins/common/file-png.c
+++ b/plug-ins/common/file-png.c
@@ -1206,9 +1206,10 @@ load_image (const gchar *filename,
while (gegl_buffer_iterator_next (iter))
{
- guchar *data = iter->data[0];
+ guchar *data = iter->data[0];
+ gint length = iter->length;
- while (iter->length--)
+ while (length--)
{
data[1] = alpha[data[0]];
data[0] -= empty;
@@ -1824,9 +1825,10 @@ ia_has_transparent_pixels (GeglBuffer *buffer)
while (gegl_buffer_iterator_next (iter))
{
- const guchar *data = iter->data[0];
+ const guchar *data = iter->data[0];
+ gint length = iter->length;
- while (iter->length--)
+ while (length--)
{
if (data[1] <= 127)
{
@@ -1866,9 +1868,10 @@ find_unused_ia_color (GeglBuffer *buffer,
while (gegl_buffer_iterator_next (iter))
{
- const guchar *data = iter->data[0];
+ const guchar *data = iter->data[0];
+ gint length = iter->length;
- while (iter->length--)
+ while (length--)
{
if (data[1] > 127)
ix_used[data[0]] = TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]