X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Fmerge.c;h=5b0704d9c26850518041ad52f6457b23344b1952;hb=81579d9e9f994fb2908f50af41c3eb033d216e58;hp=2ff57c6e5ba6fa0a88a9237f95782cb55332bbd6;hpb=a1efcf97ca2f75f4be6a0389ff2372c03ed2d4e1;p=pspp-builds.git diff --git a/src/math/merge.c b/src/math/merge.c index 2ff57c6e..5b0704d9 100644 --- a/src/math/merge.c +++ b/src/math/merge.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2007, 2009 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 @@ -19,17 +19,17 @@ performance regression. */ #include -#include +#include "math/merge.h" -#include -#include -#include -#include -#include -#include -#include +#include "data/case.h" +#include "data/casereader.h" +#include "data/casewriter.h" +#include "data/subcase.h" +#include "libpspp/array.h" +#include "libpspp/assertion.h" +#include "libpspp/taint.h" -#include "xalloc.h" +#include "gl/xalloc.h" #define MAX_MERGE_ORDER 7 @@ -44,18 +44,18 @@ struct merge struct subcase ordering; struct merge_input inputs[MAX_MERGE_ORDER]; size_t input_cnt; - size_t value_cnt; + struct caseproto *proto; }; static void do_merge (struct merge *m); struct merge * -merge_create (const struct subcase *ordering, size_t value_cnt) +merge_create (const struct subcase *ordering, const struct caseproto *proto) { struct merge *m = xmalloc (sizeof *m); subcase_clone (&m->ordering, ordering); m->input_cnt = 0; - m->value_cnt = value_cnt; + m->proto = caseproto_ref (proto); return m; } @@ -69,6 +69,7 @@ merge_destroy (struct merge *m) subcase_destroy (&m->ordering); for (i = 0; i < m->input_cnt; i++) casereader_destroy (m->inputs[i].reader); + caseproto_unref (m->proto); free (m); } } @@ -97,7 +98,7 @@ merge_make_reader (struct merge *m) } else if (m->input_cnt == 0) { - struct casewriter *writer = mem_writer_create (m->value_cnt); + struct casewriter *writer = mem_writer_create (m->proto); r = casewriter_make_reader (writer); } else @@ -131,7 +132,7 @@ do_merge (struct merge *m) assert (m->input_cnt > 1); - w = tmpfile_writer_create (m->value_cnt); + w = tmpfile_writer_create (m->proto); for (i = 0; i < m->input_cnt; i++) taint_propagate (casereader_get_taint (m->inputs[i].reader), casewriter_get_taint (w));