From ae6a0de23b11e1cf34a2751fd6d4339b20340e67 Mon Sep 17 00:00:00 2001 From: Andrea Canciani Date: Wed, 24 Nov 2010 11:16:56 +0100 Subject: [PATCH] array: Remove snapshot support Array snapshots are not used anymore and just bloat the implementation of cairo_array_t. In particular, double indirection was needed to implement array snapshots, as explained in c78685399307431903613733ddc936a104376943. --- src/cairo-array.c | 57 ++++----------------------------------- src/cairo-types-private.h | 4 +-- src/cairoint.h | 4 --- 3 files changed, 6 insertions(+), 59 deletions(-) diff --git a/src/cairo-array.c b/src/cairo-array.c index 942c9b98e..44ea3bd95 100644 --- a/src/cairo-array.c +++ b/src/cairo-array.c @@ -59,29 +59,6 @@ _cairo_array_init (cairo_array_t *array, int element_size) array->num_elements = 0; array->element_size = element_size; array->elements = NULL; - - array->is_snapshot = FALSE; -} - -/** - * _cairo_array_init_snapshot: - * @array: A #cairo_array_t to be initialized as a snapshot - * @other: The #cairo_array_t from which to create the snapshot - * - * Initialize @array as an immutable copy of @other. It is an error to - * call an array-modifying function (other than _cairo_array_fini) on - * @array after calling this function. - **/ -void -_cairo_array_init_snapshot (cairo_array_t *array, - const cairo_array_t *other) -{ - array->size = other->size; - array->num_elements = other->num_elements; - array->element_size = other->element_size; - array->elements = other->elements; - - array->is_snapshot = TRUE; } /** @@ -95,13 +72,7 @@ _cairo_array_init_snapshot (cairo_array_t *array, void _cairo_array_fini (cairo_array_t *array) { - if (array->is_snapshot) - return; - - if (array->elements) { - free (* array->elements); - free (array->elements); - } + free (array->elements); } /** @@ -120,8 +91,6 @@ _cairo_array_grow_by (cairo_array_t *array, unsigned int additional) unsigned int required_size = array->num_elements + additional; unsigned int new_size; - assert (! array->is_snapshot); - /* check for integer overflow */ if (required_size > INT_MAX || required_size < array->num_elements) return _cairo_error (CAIRO_STATUS_NO_MEMORY); @@ -140,16 +109,8 @@ _cairo_array_grow_by (cairo_array_t *array, unsigned int additional) while (new_size < required_size) new_size = new_size * 2; - if (array->elements == NULL) { - array->elements = malloc (sizeof (char *)); - if (unlikely (array->elements == NULL)) - return _cairo_error (CAIRO_STATUS_NO_MEMORY); - - *array->elements = NULL; - } - array->size = new_size; - new_elements = _cairo_realloc_ab (*array->elements, + new_elements = _cairo_realloc_ab (array->elements, array->size, array->element_size); if (unlikely (new_elements == NULL)) { @@ -157,7 +118,7 @@ _cairo_array_grow_by (cairo_array_t *array, unsigned int additional) return _cairo_error (CAIRO_STATUS_NO_MEMORY); } - *array->elements = new_elements; + array->elements = new_elements; return CAIRO_STATUS_SUCCESS; } @@ -173,8 +134,6 @@ _cairo_array_grow_by (cairo_array_t *array, unsigned int additional) void _cairo_array_truncate (cairo_array_t *array, unsigned int num_elements) { - assert (! array->is_snapshot); - if (num_elements < array->num_elements) array->num_elements = num_elements; } @@ -220,7 +179,7 @@ _cairo_array_index (cairo_array_t *array, unsigned int index) assert (index < array->num_elements); - return (void *) &(*array->elements)[index * array->element_size]; + return array->elements + index * array->element_size; } /** @@ -255,8 +214,6 @@ cairo_status_t _cairo_array_append (cairo_array_t *array, const void *element) { - assert (! array->is_snapshot); - return _cairo_array_append_multiple (array, element, 1); } @@ -280,8 +237,6 @@ _cairo_array_append_multiple (cairo_array_t *array, cairo_status_t status; void *dest; - assert (! array->is_snapshot); - status = _cairo_array_allocate (array, num_elements, &dest); if (unlikely (status)) return status; @@ -311,15 +266,13 @@ _cairo_array_allocate (cairo_array_t *array, { cairo_status_t status; - assert (! array->is_snapshot); - status = _cairo_array_grow_by (array, num_elements); if (unlikely (status)) return status; assert (array->num_elements + num_elements <= array->size); - *elements = &(*array->elements)[array->num_elements * array->element_size]; + *elements = array->elements + array->num_elements * array->element_size; array->num_elements += num_elements; diff --git a/src/cairo-types-private.h b/src/cairo-types-private.h index 93b035d7c..b5e76c7d7 100644 --- a/src/cairo-types-private.h +++ b/src/cairo-types-private.h @@ -132,9 +132,7 @@ struct _cairo_array { unsigned int size; unsigned int num_elements; unsigned int element_size; - char **elements; - - cairo_bool_t is_snapshot; + char *elements; }; /** diff --git a/src/cairoint.h b/src/cairoint.h index 1510f8ec4..030c265e9 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -303,10 +303,6 @@ _cairo_box_intersects_line_segment (cairo_box_t *box, cairo_private void _cairo_array_init (cairo_array_t *array, int element_size); -cairo_private void -_cairo_array_init_snapshot (cairo_array_t *array, - const cairo_array_t *other); - cairo_private void _cairo_array_fini (cairo_array_t *array);