diff options
author | Andrea Canciani <ranma42@gmail.com> | 2010-11-24 11:16:56 +0100 |
---|---|---|
committer | Andrea Canciani <ranma42@gmail.com> | 2010-11-24 14:45:07 +0100 |
commit | ae6a0de23b11e1cf34a2751fd6d4339b20340e67 (patch) | |
tree | fb84f22c4bffb4afc387ab43e40afa17b9634d7f /src/cairo-array.c | |
parent | 520206e99122f8b5c0440640afc1b35e14030a80 (diff) | |
download | cairo-ae6a0de23b11e1cf34a2751fd6d4339b20340e67.tar.gz |
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.
Diffstat (limited to 'src/cairo-array.c')
-rw-r--r-- | src/cairo-array.c | 57 |
1 files changed, 5 insertions, 52 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; |