- trns = pool_create_container (struct autorecode_trns, pool);
- trns->specs = pool_nalloc (trns->pool, arc->var_cnt, sizeof *trns->specs);
- trns->spec_cnt = arc->var_cnt;
- for (i = 0; i < arc->var_cnt; i++)
- {
- struct arc_spec *spec = &trns->specs[i];
- void *const *p = hsh_sort (arc->src_values[i]);
- int count = hsh_count (arc->src_values[i]);
- int j;
-
- spec->src = arc->src_vars[i];
- spec->dest = arc->dst_vars[i];
-
- if (var_is_alpha (arc->src_vars[i]))
- spec->items = hsh_create (2 * count, compare_alpha_value,
- hash_alpha_value, NULL, arc->src_vars[i]);
- else
- spec->items = hsh_create (2 * count, compare_numeric_value,
- hash_numeric_value, NULL, NULL);
-
- for (j = 0; *p; p++, j++)
- {
- struct arc_item *item = pool_alloc (trns->pool, sizeof *item);
- union arc_value *vp = *p;
-
- if (var_is_numeric (arc->src_vars[i]))
- item->from.f = vp->f;
- else
- item->from.c = pool_clone (trns->pool, vp->c,
- var_get_width (arc->src_vars[i]));
- item->to = arc->direction == ASCENDING ? j + 1 : count - j;
- hsh_force_insert (spec->items, item);
- }
- }
- add_transformation (ds,
- autorecode_trns_proc, autorecode_trns_free, trns);