# [Pixman] [PATCH 08/15] pixman-filter: Don't recurse unnecessarily.

spitzak at gmail.com spitzak at gmail.com
Sat Dec 12 10:06:37 PST 2015

```From: Bill Spitzak <spitzak at gmail.com>

Only LINEAR is not differentiable at zero, so only do the recursive
split of the integral for it.
---
pixman/pixman-filter.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/pixman/pixman-filter.c b/pixman/pixman-filter.c
index 782f73d..0cd4a68 100644
--- a/pixman/pixman-filter.c
+++ b/pixman/pixman-filter.c
@@ -160,38 +160,38 @@ integral (pixman_kernel_t reconstruct, double x1,
pixman_kernel_t sample, double scale, double x2,
double width)
{
+    if (reconstruct == PIXMAN_KERNEL_IMPULSE)
+    {
+	assert (width == 0.0);
+	return filters[sample].func (x2 / scale);
+    }
+    else if (reconstruct == PIXMAN_KERNEL_BOX && sample == PIXMAN_KERNEL_BOX)
+    {
+	assert (width <= 1.0);
+	return width;
+    }
+    else if (sample == PIXMAN_KERNEL_IMPULSE)
+    {
+	assert (width == 0.0);
+	return filters[reconstruct].func (x1);
+    }
/* If the integration interval crosses zero, break it into
* two separate integrals. This ensures that filters such
* as LINEAR that are not differentiable at 0 will still
* integrate properly.
*/
-    if (x1 < 0 && x1 + width > 0)
+    else if (reconstruct == PIXMAN_KERNEL_LINEAR && x1 < 0 && x1 + width > 0)
{
return
integral (reconstruct, x1, sample, scale, x2, - x1) +
integral (reconstruct, 0, sample, scale, x2 - x1, width + x1);
}
-    else if (x2 < 0 && x2 + width > 0)
+    else if (sample == PIXMAN_KERNEL_LINEAR && x2 < 0 && x2 + width > 0)
{
return
integral (reconstruct, x1, sample, scale, x2, - x2) +
integral (reconstruct, x1 - x2, sample, scale, 0, width + x2);
}
-    else if (reconstruct == PIXMAN_KERNEL_IMPULSE)
-    {
-	assert (width == 0.0);
-	return filters[sample].func (x2 / scale);
-    }
-    else if (reconstruct == PIXMAN_KERNEL_BOX && sample == PIXMAN_KERNEL_BOX)
-    {
-	assert (width <= 1.0);
-	return width;
-    }
-    else if (sample == PIXMAN_KERNEL_IMPULSE)
-    {
-	assert (width == 0.0);
-	return filters[reconstruct].func (x1);
-    }
else
{
/* Integration via Simpson's rule */
--
1.9.1

```