diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2008-10-22 18:12:10 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2008-10-30 17:14:27 +0000 |
commit | 57a1d932f3e9d79f3259a536ec2f45f020d46de5 (patch) | |
tree | 0f7ddf524d311b615043132e7a11a70048a992cc /src/cairo-array.c | |
parent | 2852127c72fa6cfe246e6ece0433be6c3f2a93ab (diff) | |
download | cairo-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.c | 16 |
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); |