X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fautorecode.c;h=499f149d22a14c4003f2d2ae1a9a42d368202798;hb=4bc96629da7d8f0354d8ebf297052e881f936d83;hp=cd1a220affcc0d9a3a6a243350b73ee2f9c9c087;hpb=38dd86523879d23ec59488fa05f38e03e9d0176e;p=pspp diff --git a/src/language/stats/autorecode.c b/src/language/stats/autorecode.c index cd1a220aff..499f149d22 100644 --- a/src/language/stats/autorecode.c +++ b/src/language/stats/autorecode.c @@ -96,8 +96,7 @@ struct autorecode_pgm bool blank_valid; }; -static trns_proc_func autorecode_trns_proc; -static trns_free_func autorecode_trns_free; +static const struct trns_class autorecode_trns_class; static int compare_arc_items (const void *, const void *, const void *aux); static void arc_free (struct autorecode_pgm *); @@ -132,7 +131,7 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds) bool print = false; /* Create procedure. */ - struct autorecode_pgm *arc = xzalloc (sizeof *arc); + struct autorecode_pgm *arc = XZALLOC (struct autorecode_pgm); arc->blank_valid = true; /* Parse variable lists. */ @@ -312,8 +311,8 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds) struct arc_item *item = xmalloc (sizeof *item); item->width = width; value_clone (&item->from, value, width); - item->missing = mv_is_value_missing_varwidth (&spec->mv, value, spec->width, - MV_ANY); + item->missing = mv_is_value_missing_varwidth (&spec->mv, value, + spec->width); item->value_label = ds_steal_cstr (&value_label); hmap_insert (&spec->items->ht, &item->hmap_node, hash); @@ -387,7 +386,7 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds) old_values->root, pivot_value_new_value ( &item->from, item->width, (item->width - ? &(struct fmt_spec) { FMT_F, item->width, 0 } + ? &(struct fmt_spec) { .type = FMT_F, .w = item->width } : &spec->format), dict_get_encoding (dict))); pivot_table_put2 (table, 0, old_value_idx, @@ -450,7 +449,7 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds) /* Free array. */ free (items); } - add_transformation (ds, autorecode_trns_proc, autorecode_trns_free, arc); + add_transformation (ds, &autorecode_trns_class, arc); for (size_t i = 0; i < n_dsts; i++) free (dst_names[i]); @@ -553,7 +552,7 @@ compare_arc_items (const void *a_, const void *b_, const void *direction_) return direction == ASCENDING ? cmp : -cmp; } -static int +static enum trns_result autorecode_trns_proc (void *arc_, struct ccase **c, casenumber case_idx UNUSED) { @@ -568,7 +567,7 @@ autorecode_trns_proc (void *arc_, struct ccase **c, size_t hash = value_hash (value, width, 0); const struct arc_item *item = find_arc_item (spec->items, value, width, hash); - case_data_rw (*c, spec->dst)->f = item ? item->to : SYSMIS; + *case_num_rw (*c, spec->dst) = item ? item->to : SYSMIS; } return TRNS_CONTINUE; @@ -582,3 +581,9 @@ autorecode_trns_free (void *arc_) arc_free (arc); return true; } + +static const struct trns_class autorecode_trns_class = { + .name = "AUTORECODE", + .execute = autorecode_trns_proc, + .destroy = autorecode_trns_free, +};