ff4dfe326848edff1a36f5c447ba5d89eb16b98b
[pspp-builds.git] / src / data / case-sink.c
1 /* PSPP - computes sample statistics.
2    Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
3    Written by Ben Pfaff <blp@gnu.org>.
4
5    This program is free software; you can redistribute it and/or
6    modify it under the terms of the GNU General Public License as
7    published by the Free Software Foundation; either version 2 of the
8    License, or (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful, but
11    WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18    02110-1301, USA. */
19
20 #include <config.h>
21
22 #include <data/case-sink.h>
23
24 #include <stdlib.h>
25
26 #include <data/dictionary.h>
27
28 #include "xalloc.h"
29
30 /* Creates a case sink to accept cases from the given DICT with
31    class CLASS and auxiliary data AUX. */
32 struct case_sink *
33 create_case_sink (const struct case_sink_class *class,
34                   const struct dictionary *dict,
35                   void *aux) 
36 {
37   struct case_sink *sink = xmalloc (sizeof *sink);
38   sink->class = class;
39   sink->value_cnt = dict_get_compacted_value_cnt (dict);
40   sink->aux = aux;
41   return sink;
42 }
43
44 /* Destroys case sink SINK.  */
45 void
46 free_case_sink (struct case_sink *sink) 
47 {
48   if (sink != NULL) 
49     {
50       if (sink->class->destroy != NULL)
51         sink->class->destroy (sink);
52       free (sink); 
53     }
54 }
55 /* Null sink.  Used by a few procedures that keep track of output
56    themselves and would throw away anything that the sink
57    contained anyway. */
58
59 const struct case_sink_class null_sink_class = 
60   {
61     "null",
62     NULL,
63     NULL,
64     NULL,
65     NULL,
66   };