X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fxforms%2Fsample.c;h=665cd4468edc370e80390441cb27d1ddb9fa3f27;hb=5327d77be2296f6be3f532c20456eab839dc7c62;hp=6fbc758c2e1329f41d57d626daa9eb8ca75b495a;hpb=14aac9fe7a7efbb6c9bded2ed5969a643cb76645;p=pspp diff --git a/src/language/xforms/sample.c b/src/language/xforms/sample.c index 6fbc758c2e..665cd4468e 100644 --- a/src/language/xforms/sample.c +++ b/src/language/xforms/sample.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,16 +21,16 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include +#include "data/dataset.h" +#include "data/variable.h" +#include "language/command.h" +#include "language/lexer/lexer.h" +#include "libpspp/compiler.h" +#include "libpspp/message.h" +#include "libpspp/str.h" +#include "math/random.h" -#include "xalloc.h" +#include "gl/xalloc.h" #include "gettext.h" #define _(msgid) gettext (msgid) @@ -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 lex_end_of_command (lexer); + 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, +};