X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flanguage%2Fxforms%2Fsample.c;h=665cd4468edc370e80390441cb27d1ddb9fa3f27;hb=5327d77be2296f6be3f532c20456eab839dc7c62;hp=260841a6029b541ddd97dc3ca811391dfee68471;hpb=fe8dc2171009e90d2335f159d05f7e6660e24780;p=pspp diff --git a/src/language/xforms/sample.c b/src/language/xforms/sample.c index 260841a602..665cd4468e 100644 --- a/src/language/xforms/sample.c +++ b/src/language/xforms/sample.c @@ -51,8 +51,7 @@ struct sample_trns unsigned frac; /* TYPE_FRACTION: a fraction of UINT_MAX. */ }; -static trns_proc_func sample_trns_proc; -static trns_free_func sample_trns_free; +static const struct trns_class sample_trns_class; int cmd_sample (struct lexer *lexer, struct dataset *ds) @@ -88,17 +87,9 @@ cmd_sample (struct lexer *lexer, struct dataset *ds) lex_get (lexer); if (!lex_force_match_id (lexer, "FROM")) return CMD_FAILURE; - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "FROM", a + 1, INT_MAX)) return CMD_FAILURE; b = lex_integer (lexer); - if (a >= b) - { - msg (SE, _("Cannot sample %d observations from a population of " - "%d."), - a, b); - return CMD_FAILURE; - } - frac = 0; } lex_get (lexer); @@ -109,13 +100,13 @@ cmd_sample (struct lexer *lexer, struct dataset *ds) trns->N = b; trns->m = trns->t = 0; trns->frac = frac; - add_transformation (ds, sample_trns_proc, sample_trns_free, trns); + add_transformation (ds, &sample_trns_class, trns); return CMD_SUCCESS; } /* Executes a SAMPLE transformation. */ -static int +static enum trns_result sample_trns_proc (void *t_, struct ccase **c UNUSED, casenumber case_num UNUSED) { @@ -154,3 +145,9 @@ sample_trns_free (void *t_) free (t); return true; } + +static const struct trns_class sample_trns_class = { + .name = "SAMPLE", + .execute = sample_trns_proc, + .destroy = sample_trns_free, +};