summaryrefslogtreecommitdiff
path: root/src/cairo-polygon.c
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2007-03-13 05:51:39 -0400
committerBehdad Esfahbod <behdad@behdad.org>2007-03-13 05:51:39 -0400
commit3ce84390de8be69f369a4da80c3039b716ebb0e4 (patch)
tree5b92447452f62e16dd7ba4ef36906228f9d6772f /src/cairo-polygon.c
parent6976ab1392e0fd07a081e6d6056510070e1d6df9 (diff)
downloadcairo-3ce84390de8be69f369a4da80c3039b716ebb0e4.tar.gz
[cairo-polygon] Clean-up realloc algorithm for clarity
Diffstat (limited to 'src/cairo-polygon.c')
-rw-r--r--src/cairo-polygon.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/cairo-polygon.c b/src/cairo-polygon.c
index dc9d3805b..bdd438a63 100644
--- a/src/cairo-polygon.c
+++ b/src/cairo-polygon.c
@@ -40,7 +40,7 @@
/* private functions */
static cairo_status_t
-_cairo_polygon_grow_by (cairo_polygon_t *polygon, int additional);
+_cairo_polygon_grow (cairo_polygon_t *polygon);
void
_cairo_polygon_init (cairo_polygon_t *polygon)
@@ -67,25 +67,22 @@ _cairo_polygon_fini (cairo_polygon_t *polygon)
}
static cairo_status_t
-_cairo_polygon_grow_by (cairo_polygon_t *polygon, int additional)
+_cairo_polygon_grow (cairo_polygon_t *polygon)
{
cairo_edge_t *new_edges;
int old_size = polygon->edges_size;
- int new_size = polygon->num_edges + additional;
+ int new_size = old_size ? 2 * old_size : 16;
- if (new_size <= polygon->edges_size) {
- return CAIRO_STATUS_SUCCESS;
- }
+ assert (polygon->num_edges <= polygon->edges_size);
- polygon->edges_size = new_size;
- new_edges = realloc (polygon->edges, polygon->edges_size * sizeof (cairo_edge_t));
+ new_edges = realloc (polygon->edges, new_size * sizeof (cairo_edge_t));
if (new_edges == NULL) {
- polygon->edges_size = old_size;
return CAIRO_STATUS_NO_MEMORY;
}
polygon->edges = new_edges;
+ polygon->edges_size = new_size;
return CAIRO_STATUS_SUCCESS;
}
@@ -102,8 +99,7 @@ _cairo_polygon_add_edge (cairo_polygon_t *polygon, cairo_point_t *p1, cairo_poin
}
if (polygon->num_edges >= polygon->edges_size) {
- int additional = polygon->edges_size ? polygon->edges_size : 16;
- status = _cairo_polygon_grow_by (polygon, additional);
+ status = _cairo_polygon_grow (polygon);
if (status) {
return status;
}