static int _cairo_hull_vertex_compare (const void *av, const void *bv) { cairo_hull_t *a = (cairo_hull_t *) av; cairo_hull_t *b = (cairo_hull_t *) bv; int ret; ret = _cairo_slope_compare (&a->slope, &b->slope); /* * In the case of two vertices with identical slope from the * extremal point discard the nearer point. */ if (ret == 0) { int cmp; cmp = _cairo_int64_cmp (_slope_length (&a->slope), _slope_length (&b->slope)); /* * Use the points' ids to ensure a well-defined ordering, * and avoid setting discard on both points. */ if (cmp < 0 || (cmp == 0 && a->id < b->id)) { a->discard = 1; ret = -1; } else { b->discard = 1; ret = 1; } } return ret; }
static int _cairo_hull_vertex_compare (const void *av, const void *bv) { cairo_hull_t *a = (cairo_hull_t *) av; cairo_hull_t *b = (cairo_hull_t *) bv; int ret; /* Some libraries are reported to actually compare identical * pointers and require the result to be 0. This is the crazy world we * have to live in. */ if (a == b) return 0; ret = _cairo_slope_compare (&a->slope, &b->slope); /* * In the case of two vertices with identical slope from the * extremal point discard the nearer point. */ if (ret == 0) { int cmp; cmp = _cairo_int64_cmp (_slope_length (&a->slope), _slope_length (&b->slope)); /* * Use the points' ids to ensure a well-defined ordering, * and avoid setting discard on both points. */ if (cmp < 0 || (cmp == 0 && a->id < b->id)) { a->discard = 1; ret = -1; } else { b->discard = 1; ret = 1; } } return ret; }