50 double relative_tol,
double *given_coords,
51 int **orderingp,
int **levelsp,
int *num_levelsp)
58 double hierarchy_span;
66 if (compute_y_coords(
graph, n, y, n)) {
73 *orderingp = ordering =
gv_calloc(n,
sizeof(
int));
74 for (i = 0; i < n; i++) {
83 hierarchy_span = y[ordering[n - 1]] - y[ordering[0]];
84 tol =
MAX(abs_tol, relative_tol * hierarchy_span / (n - 1));
91 for (i = 1; i < n; i++) {
92 if (y[ordering[i]] - y[ordering[i - 1]] >
tol) {
96 *num_levelsp = num_levels;
97 if (num_levels == 0) {
98 *levelsp = levels =
gv_calloc(1,
sizeof(
int));
102 *levelsp = levels =
gv_calloc(num_levels,
sizeof(
int));
103 for (i = 1; i < n; i++) {
104 if (y[ordering[i]] - y[ordering[i - 1]] >
tol) {
Memory allocation wrappers that exit on failure.
static void * gv_calloc(size_t nmemb, size_t size)
Agraph_t * graph(char *name)
void quicksort_place(double *place, int *ordering, int size)