X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fcasegrouper.c;h=52238c8c610dff3593eaf6c82553f5e21d8215a7;hb=81579d9e9f994fb2908f50af41c3eb033d216e58;hp=75925650f277ad8fbdf0f83b548eebb217b9138f;hpb=ed09f0f21add5e56e8395a5e8589cda6f96420bf;p=pspp-builds.git diff --git a/src/data/casegrouper.c b/src/data/casegrouper.c index 75925650..52238c8c 100644 --- a/src/data/casegrouper.c +++ b/src/data/casegrouper.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007, 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 @@ -16,17 +16,17 @@ #include -#include +#include "data/casegrouper.h" #include -#include -#include -#include -#include -#include +#include "data/casereader.h" +#include "data/casewriter.h" +#include "data/dictionary.h" +#include "data/subcase.h" +#include "libpspp/taint.h" -#include "xalloc.h" +#include "gl/xalloc.h" /* A casegrouper. */ struct casegrouper @@ -80,28 +80,28 @@ casegrouper_get_next_group (struct casegrouper *grouper, if (grouper->same_group != NULL) { struct casewriter *writer; - struct ccase group_case, tmp; + struct ccase *group_case, *tmp; - if (!casereader_read (grouper->reader, &group_case)) + group_case = casereader_read (grouper->reader); + if (group_case == NULL) { *reader = NULL; return false; } - writer = autopaging_writer_create (casereader_get_value_cnt (grouper->reader)); - case_clone (&tmp, &group_case); - casewriter_write (writer, &tmp); + writer = autopaging_writer_create ( + casereader_get_proto (grouper->reader)); - while (casereader_peek (grouper->reader, 0, &tmp) - && grouper->same_group (&group_case, &tmp, grouper->aux)) + casewriter_write (writer, case_ref (group_case)); + + while ((tmp = casereader_peek (grouper->reader, 0)) != NULL + && grouper->same_group (group_case, tmp, grouper->aux)) { - struct ccase discard; - casereader_read (grouper->reader, &discard); - case_destroy (&discard); - casewriter_write (writer, &tmp); + case_unref (casereader_read (grouper->reader)); + casewriter_write (writer, tmp); } - case_destroy (&tmp); - case_destroy (&group_case); + case_unref (tmp); + case_unref (group_case); *reader = casewriter_make_reader (writer); return true;