X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Fmerge.c;h=2ff57c6e5ba6fa0a88a9237f95782cb55332bbd6;hb=f05f98b6b0b7e81f77657a4313fccc259eb5c506;hp=4fc7c8dcf21433a7c23692c275a0ed398c850789;hpb=f6b8e421cd29ae0aef4018bbe2e1a06d0bef57df;p=pspp-builds.git diff --git a/src/math/merge.c b/src/math/merge.c index 4fc7c8dc..2ff57c6e 100644 --- a/src/math/merge.c +++ b/src/math/merge.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007, 2009 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,10 +21,10 @@ #include -#include #include #include #include +#include #include #include #include @@ -36,12 +36,12 @@ struct merge_input { struct casereader *reader; - struct ccase c; + struct ccase *c; }; struct merge { - struct case_ordering *ordering; + struct subcase ordering; struct merge_input inputs[MAX_MERGE_ORDER]; size_t input_cnt; size_t value_cnt; @@ -50,10 +50,10 @@ struct merge static void do_merge (struct merge *m); struct merge * -merge_create (const struct case_ordering *ordering, size_t value_cnt) +merge_create (const struct subcase *ordering, size_t value_cnt) { struct merge *m = xmalloc (sizeof *m); - m->ordering = case_ordering_clone (ordering); + subcase_clone (&m->ordering, ordering); m->input_cnt = 0; m->value_cnt = value_cnt; return m; @@ -66,7 +66,7 @@ merge_destroy (struct merge *m) { size_t i; - case_ordering_destroy (m->ordering); + subcase_destroy (&m->ordering); for (i = 0; i < m->input_cnt; i++) casereader_destroy (m->inputs[i].reader); free (m); @@ -111,7 +111,8 @@ read_input_case (struct merge *m, size_t idx) { struct merge_input *i = &m->inputs[idx]; - if (casereader_read (i->reader, &i->c)) + i->c = casereader_read (i->reader); + if (i->c) return true; else { @@ -144,11 +145,11 @@ do_merge (struct merge *m) min = 0; for (i = 1; i < m->input_cnt; i++) - if (case_ordering_compare_cases (&m->inputs[i].c, &m->inputs[min].c, - m->ordering) < 0) + if (subcase_compare_3way (&m->ordering, m->inputs[i].c, + &m->ordering, m->inputs[min].c) < 0) min = i; - casewriter_write (w, &m->inputs[min].c); + casewriter_write (w, m->inputs[min].c); read_input_case (m, min); }