From 4111815afe3c2023da0e9e48ef4df2b2feffdf48 Mon Sep 17 00:00:00 2001 From: Nicola Fontana Date: Fri, 29 Jan 2010 18:14:36 +0100 Subject: [PATCH] [CpmlPair] Return nothing from pair setters Do not return CpmlPair/CpmlVector from cpml_pair_copy(), cpml_pair_from_cairo() and cpml_vector_from_angle() to make clear these functions do not allocate a new pair but set a pre-existing struct. The pointer was returned in order to minimize typing with a basic "fluent" approach but it came out it was misleading: issue #23 provides a good example. --- adg/adg-adim.c | 45 ++++++++++++++++++++++++++++++--------------- adg/adg-path.c | 9 ++++++--- adg/adg-rdim.c | 6 ++++-- cpml/cpml-arc.c | 15 ++++++++++----- cpml/cpml-curve.c | 12 ++++++++---- cpml/cpml-line.c | 12 ++++++++---- cpml/cpml-pair.c | 38 +++++++++++--------------------------- cpml/cpml-pair.h | 6 +++--- 8 files changed, 80 insertions(+), 63 deletions(-) diff --git a/adg/adg-adim.c b/adg/adg-adim.c index ffd99e02..5ee7f971 100644 --- a/adg/adg-adim.c +++ b/adg/adg-adim.c @@ -588,31 +588,41 @@ arrange(AdgEntity *entity) } local = adg_entity_get_local_matrix(entity); + cpml_pair_copy(&ref1, adg_dim_get_ref1(dim)); + cpml_pair_copy(&ref2, adg_dim_get_ref2(dim)); + cpml_pair_copy(&base1, &data->point.base1); + cpml_pair_copy(&base12, &data->point.base12); + cpml_pair_copy(&base2, &data->point.base2); /* Apply the local matrix to the relevant points */ - cpml_pair_transform(cpml_pair_copy(&ref1, adg_dim_get_ref1(dim)), local); - cpml_pair_transform(cpml_pair_copy(&ref2, adg_dim_get_ref2(dim)), local); - cpml_pair_transform(cpml_pair_copy(&base1, &data->point.base1), local); - cpml_pair_transform(cpml_pair_copy(&base12, &data->point.base12), local); - cpml_pair_transform(cpml_pair_copy(&base2, &data->point.base2), local); + cpml_pair_transform(&ref1, local); + cpml_pair_transform(&ref2, local); + cpml_pair_transform(&base1, local); + cpml_pair_transform(&base12, local); + cpml_pair_transform(&base2, local); /* Combine points and global shifts to build the path */ - cpml_pair_add(cpml_pair_copy(&pair, &ref1), &data->shift.from1); + cpml_pair_copy(&pair, &ref1); + cpml_pair_add(&pair, &data->shift.from1); cpml_pair_to_cairo(&pair, &data->cpml.data[6]); - cpml_pair_add(cpml_pair_copy(&pair, &base1), &data->shift.base1); + cpml_pair_copy(&pair, &base1); + cpml_pair_add(&pair, &data->shift.base1); cpml_pair_to_cairo(&pair, &data->cpml.data[1]); cpml_pair_add(&pair, &data->shift.to1); cpml_pair_to_cairo(&pair, &data->cpml.data[8]); - cpml_pair_add(cpml_pair_copy(&pair, &base12), &data->shift.base12); + cpml_pair_copy(&pair, &base12); + cpml_pair_add(&pair, &data->shift.base12); cpml_pair_to_cairo(&pair, &data->cpml.data[3]); - cpml_pair_add(cpml_pair_copy(&pair, &ref2), &data->shift.from2); + cpml_pair_copy(&pair, &ref2); + cpml_pair_add(&pair, &data->shift.from2); cpml_pair_to_cairo(&pair, &data->cpml.data[10]); - cpml_pair_add(cpml_pair_copy(&pair, &base2), &data->shift.base2); + cpml_pair_copy(&pair, &base2); + cpml_pair_add(&pair, &data->shift.base2); cpml_pair_to_cairo(&pair, &data->cpml.data[4]); cpml_pair_add(&pair, &data->shift.to2); @@ -772,15 +782,18 @@ update_geometry(AdgADim *adim) /* point.base1 */ cpml_vector_set_length(&vector[0], distance); - cpml_pair_add(cpml_pair_copy(&data->point.base1, &vector[0]), ¢er); + cpml_pair_copy(&data->point.base1, &vector[0]); + cpml_pair_add(&data->point.base1, ¢er); /* point.base2 */ cpml_vector_set_length(&vector[2], distance); - cpml_pair_add(cpml_pair_copy(&data->point.base2, &vector[2]), ¢er); + cpml_pair_copy(&data->point.base2, &vector[2]); + cpml_pair_add(&data->point.base2, ¢er); /* point.base12 */ cpml_vector_set_length(&vector[1], distance); - cpml_pair_add(cpml_pair_copy(&data->point.base12, &vector[1]), ¢er); + cpml_pair_copy(&data->point.base12, &vector[1]); + cpml_pair_add(&data->point.base12, ¢er); data->geometry_arranged = TRUE; } @@ -850,8 +863,10 @@ get_info(AdgADim *adim, CpmlVector vector[], ref1 = adg_dim_get_ref1(dim); ref2 = adg_dim_get_ref2(dim); - cpml_pair_sub(cpml_pair_copy(&vector[0], ref1), adg_point_get_pair(data->org1)); - cpml_pair_sub(cpml_pair_copy(&vector[2], ref2), adg_point_get_pair(data->org2)); + cpml_pair_copy(&vector[0], ref1); + cpml_pair_sub(&vector[0], adg_point_get_pair(data->org1)); + cpml_pair_copy(&vector[2], ref2); + cpml_pair_sub(&vector[2], adg_point_get_pair(data->org2)); factor = vector[0].x * vector[2].y - vector[0].y * vector[2].x; if (factor == 0) diff --git a/adg/adg-path.c b/adg/adg-path.c index 21e19850..f0272f43 100644 --- a/adg/adg-path.c +++ b/adg/adg-path.c @@ -1143,20 +1143,23 @@ do_fillet(AdgPath *path, AdgPrimitive *current) cpml_primitive_vector_at(last_dup, &vector, pos); cpml_vector_set_length(&vector, offset); cpml_vector_normal(&vector); - cpml_pair_sub(cpml_pair_copy(&p[0], ¢er), &vector); + cpml_pair_copy(&p[0], ¢er); + cpml_pair_sub(&p[0], &vector); /* Compute the mid point of the fillet */ cpml_pair_from_cairo(&vector, current->org); cpml_pair_sub(&vector, ¢er); cpml_vector_set_length(&vector, radius); - cpml_pair_add(cpml_pair_copy(&p[1], ¢er), &vector); + cpml_pair_copy(&p[1], ¢er); + cpml_pair_add(&p[1], &vector); /* Compute the end point of the fillet */ pos = cpml_primitive_near_pos(current_dup, ¢er); cpml_primitive_vector_at(current_dup, &vector, pos); cpml_vector_set_length(&vector, offset); cpml_vector_normal(&vector); - cpml_pair_sub(cpml_pair_copy(&p[2], ¢er), &vector); + cpml_pair_copy(&p[2], ¢er); + cpml_pair_sub(&p[2], &vector); g_free(current_dup); g_free(last_dup); diff --git a/adg/adg-rdim.c b/adg/adg-rdim.c index d0b4045b..f77d2235 100644 --- a/adg/adg-rdim.c +++ b/adg/adg-rdim.c @@ -407,10 +407,12 @@ update_geometry(AdgRDim *rdim) spacing = adg_dim_style_get_baseline_spacing(dim_style); level = adg_dim_get_level(dim); pos_distance = cpml_pair_distance(pos, ref1); - cpml_pair_sub(cpml_pair_copy(&vector, ref2), ref1); + cpml_pair_copy(&vector, ref2); + cpml_pair_sub(&vector, ref1); if (cpml_pair_squared_distance(pos, ref1) < - cpml_pair_squared_distance(pos, ref2)) + cpml_pair_squared_distance(pos, ref2)) { cpml_pair_negate(&vector); + } /* radius */ data->radius = cpml_pair_distance(&vector, NULL); diff --git a/cpml/cpml-arc.c b/cpml/cpml-arc.c index ce7484f9..d609366d 100644 --- a/cpml/cpml-arc.c +++ b/cpml/cpml-arc.c @@ -539,8 +539,10 @@ get_center(const CpmlPair *p, CpmlPair *dest) } /* Translate the 3 points of -p0, to simplify the formula */ - cpml_pair_sub(cpml_pair_copy(&b, &p[1]), &p[0]); - cpml_pair_sub(cpml_pair_copy(&c, &p[2]), &p[0]); + cpml_pair_copy(&b, &p[1]); + cpml_pair_sub(&b, &p[0]); + cpml_pair_copy(&c, &p[2]); + cpml_pair_sub(&c, &p[0]); /* Check for division by 0, that is the case where the 3 given points * are laying on a straight line and there is no fitting circle */ @@ -565,7 +567,8 @@ get_angles(const CpmlPair *p, const CpmlPair *center, double mid; /* Calculate the starting angle */ - cpml_pair_sub(cpml_pair_copy(&vector, &p[0]), center); + cpml_pair_copy(&vector, &p[0]); + cpml_pair_sub(&vector, center); *start = cpml_vector_angle(&vector); if (p[0].x == p[2].x && p[0].y == p[2].y) { @@ -575,9 +578,11 @@ get_angles(const CpmlPair *p, const CpmlPair *center, } else { /* Calculate the mid and end angle: cpml_vector_angle() * returns an angle between -M_PI and M_PI */ - cpml_pair_sub(cpml_pair_copy(&vector, &p[1]), center); + cpml_pair_copy(&vector, &p[1]); + cpml_pair_sub(&vector, center); mid = cpml_vector_angle(&vector); - cpml_pair_sub(cpml_pair_copy(&vector, &p[2]), center); + cpml_pair_copy(&vector, &p[2]); + cpml_pair_sub(&vector, center); *end = cpml_vector_angle(&vector); if (*end > *start) { diff --git a/cpml/cpml-curve.c b/cpml/cpml-curve.c index 45fc364d..3c4dfe2c 100644 --- a/cpml/cpml-curve.c +++ b/cpml/cpml-curve.c @@ -494,10 +494,12 @@ cpml_curve_offset(CpmlPrimitive *curve, double offset) cpml_pair_from_cairo(&p3, &curve->data[3]); /* v0 = p1-p0 */ - cpml_pair_sub(cpml_pair_copy(&v0, &p1), &p0); + cpml_pair_copy(&v0, &p1); + cpml_pair_sub(&v0, &p0); /* v3 = p3-p2 */ - cpml_pair_sub(cpml_pair_copy(&v3, &p3), &p2); + cpml_pair_copy(&v3, &p3); + cpml_pair_sub(&v3, &p2); /* pm = point in C(m) offseted the requested @offset distance */ cpml_curve_vector_at_time(curve, &vm, m); @@ -507,12 +509,14 @@ cpml_curve_offset(CpmlPrimitive *curve, double offset) cpml_pair_add(&pm, &vm); /* p0 = p0 + normal of v0 of @offset magnitude (exact value) */ - cpml_vector_set_length(cpml_pair_copy(&vtmp, &v0), offset); + cpml_pair_copy(&vtmp, &v0); + cpml_vector_set_length(&vtmp, offset); cpml_vector_normal(&vtmp); cpml_pair_add(&p0, &vtmp); /* p3 = p3 + normal of v3 of @offset magnitude, as done for p0 */ - cpml_vector_set_length(cpml_pair_copy(&vtmp, &v3), offset); + cpml_pair_copy(&vtmp, &v3); + cpml_vector_set_length(&vtmp, offset); cpml_vector_normal(&vtmp); cpml_pair_add(&p3, &vtmp); diff --git a/cpml/cpml-line.c b/cpml/cpml-line.c index bca309ca..45a53804 100644 --- a/cpml/cpml-line.c +++ b/cpml/cpml-line.c @@ -169,11 +169,13 @@ cpml_line_near_pos(const CpmlPrimitive *line, const CpmlPair *pair) cpml_pair_from_cairo(&p[0], cpml_primitive_get_point(line, 0)); cpml_pair_from_cairo(&p[1], cpml_primitive_get_point(line, -1)); - cpml_pair_sub(cpml_pair_copy(&normal, &p[1]), &p[2]); + cpml_pair_copy(&normal, &p[1]); + cpml_pair_sub(&normal, &p[2]); cpml_vector_normal(&normal); cpml_pair_copy(&p[2], pair); - cpml_pair_add(cpml_pair_copy(&p[3], pair), &normal); + cpml_pair_copy(&p[3], pair); + cpml_pair_add(&p[3], &normal); /* Ensure to return 0 if intersection() fails */ pos = 0; @@ -258,8 +260,10 @@ intersection(const CpmlPair *p, CpmlPair *dest, double *get_factor) CpmlVector v[2]; double factor; - cpml_pair_sub(cpml_pair_copy(&v[0], &p[1]), &p[0]); - cpml_pair_sub(cpml_pair_copy(&v[1], &p[3]), &p[2]); + cpml_pair_copy(&v[0], &p[1]); + cpml_pair_sub(&v[0], &p[0]); + cpml_pair_copy(&v[1], &p[3]); + cpml_pair_sub(&v[1], &p[2]); factor = v[0].x * v[1].y - v[0].y * v[1].x; /* Check for equal slopes (the lines are parallel) */ diff --git a/cpml/cpml-pair.c b/cpml/cpml-pair.c index f6699a41..b6201cb5 100644 --- a/cpml/cpml-pair.c +++ b/cpml/cpml-pair.c @@ -71,13 +71,11 @@ static CpmlPair fallback_pair = { 0, 0 }; * @src: the source #CpmlPair * * Copies @src in @pair. - * - * Return value: @pair **/ -CpmlPair * +void cpml_pair_copy(CpmlPair *pair, const CpmlPair *src) { - return memcpy(pair, src, sizeof(CpmlPair)); + memcpy(pair, src, sizeof(CpmlPair)); } /** @@ -85,17 +83,14 @@ cpml_pair_copy(CpmlPair *pair, const CpmlPair *src) * @pair: the destination #CpmlPair * @path_data: the original path data point * - * Gets @pair from a #cairo_path_data_t struct. @path_data should contains + * Sets @pair from a #cairo_path_data_t struct. @path_data should contains * a point data: it is up to the caller to be sure @path_data is valid. - * - * Return value: @pair **/ -CpmlPair * +void cpml_pair_from_cairo(CpmlPair *pair, const cairo_path_data_t *path_data) { pair->x = path_data->point.x; pair->y = path_data->point.y; - return pair; } @@ -331,38 +326,27 @@ cpml_pair_to_cairo(const CpmlPair *pair, cairo_path_data_t *path_data) * * Calculates the coordinates of the point far %1 from the origin * in the @angle direction. The result is stored in @vector. - * - * Return value: @vector **/ -CpmlVector * +void cpml_vector_from_angle(CpmlVector *vector, double angle) { /* Check for common conditions */ if (angle == -M_PI_2) { vector->x = 0; vector->y = -1; - return vector; - } - if (angle == M_PI_2) { + } else if (angle == M_PI_2) { vector->x = 0; vector->y = +1; - return vector; - } - if (angle == M_PI || angle == -M_PI) { + } else if (angle == M_PI || angle == -M_PI) { vector->x = -1; vector->y = 0; - return vector; - } - if (angle == 0) { + } else if (angle == 0) { vector->x = +1; vector->y = 0; - return vector; + } else { + vector->x = cos(angle); + vector->y = sin(angle); } - - vector->x = cos(angle); - vector->y = sin(angle); - - return vector; } /** diff --git a/cpml/cpml-pair.h b/cpml/cpml-pair.h index 2b154972..f9a3c218 100644 --- a/cpml/cpml-pair.h +++ b/cpml/cpml-pair.h @@ -33,9 +33,9 @@ struct _CpmlPair { }; -CpmlPair * cpml_pair_copy (CpmlPair *pair, +void cpml_pair_copy (CpmlPair *pair, const CpmlPair *src); -CpmlPair * cpml_pair_from_cairo (CpmlPair *pair, +void cpml_pair_from_cairo (CpmlPair *pair, const cairo_path_data_t *path_data); @@ -60,7 +60,7 @@ void cpml_pair_to_cairo (const CpmlPair *pair, cairo_path_data_t *path_data); -CpmlVector * cpml_vector_from_angle (CpmlVector *vector, +void cpml_vector_from_angle (CpmlVector *vector, double angle); void cpml_vector_set_length (CpmlVector *vector, -- 2.11.4.GIT