summaryrefslogtreecommitdiff
path: root/src/cairo-array.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2008-10-22 18:12:10 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2008-10-30 17:14:27 +0000
commit57a1d932f3e9d79f3259a536ec2f45f020d46de5 (patch)
tree0f7ddf524d311b615043132e7a11a70048a992cc /src/cairo-array.c
parent2852127c72fa6cfe246e6ece0433be6c3f2a93ab (diff)
downloadcairo-57a1d932f3e9d79f3259a536ec2f45f020d46de5.tar.gz
[array] Rearrange user_data_fini() to optimize common case.
Micro-optimisation to avoid the _cairo_array_index() for the common case of 0 elements.
Diffstat (limited to 'src/cairo-array.c')
-rw-r--r--src/cairo-array.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/cairo-array.c b/src/cairo-array.c
index b2790c8a1..f38cfe3e5 100644
--- a/src/cairo-array.c
+++ b/src/cairo-array.c
@@ -382,14 +382,18 @@ _cairo_user_data_array_init (cairo_user_data_array_t *array)
void
_cairo_user_data_array_fini (cairo_user_data_array_t *array)
{
- int i, num_slots;
- cairo_user_data_slot_t *slots;
+ unsigned int num_slots;
num_slots = array->num_elements;
- slots = _cairo_array_index (array, 0);
- for (i = 0; i < num_slots; i++) {
- if (slots[i].user_data != NULL && slots[i].destroy != NULL)
- slots[i].destroy (slots[i].user_data);
+ if (num_slots) {
+ cairo_user_data_slot_t *slots;
+
+ slots = _cairo_array_index (array, 0);
+ do {
+ if (slots->user_data != NULL && slots->destroy != NULL)
+ slots->destroy (slots->user_data);
+ slots++;
+ } while (--num_slots);
}
_cairo_array_fini (array);