- int x;
- const struct variable *var = iact->vars[v];
-
- struct variable_node *vn = lookup_variable (&cat->varmap, var, hash_pointer (var, 0));
-
- struct value_node *valnd = NULL;
- struct value_node **array ;
-
- assert (vn->n_vals == hmap_count (&vn->valmap));
-
- if (vn->n_vals == 0)
- {
- cat->sane = false;
- return;
- }
-
- vn->indirection = pool_calloc (cat->pool, vn->n_vals, sizeof *vn->indirection);
-
- /* Sort the VALMAP here */
- array = xcalloc (sizeof *array, vn->n_vals);
- HMAP_FOR_EACH (valnd, struct value_node, node, &vn->valmap)
- {
- /* Note: This loop is probably superfluous, it could be done in the
- update stage (at the expense of a realloc) */
- array[valnd->index] = valnd;
- }
-
- sort (array, vn->n_vals, sizeof (*array),
- compare_value_node_3way, vn);
-
- for (x = 0; x < vn->n_vals; ++x)
- {
- struct value_node *vvv = array[x];
- vn->indirection[vn->n_vals - x - 1] = vvv->index;
- }
- free (array);
-
- cat->iap[i].df_prod[v] = df * (vn->n_vals - 1);