[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pspp-cvs] pspp/src data/ChangeLog data/casewriter-provide...
From: |
Ben Pfaff |
Subject: |
[Pspp-cvs] pspp/src data/ChangeLog data/casewriter-provide... |
Date: |
Mon, 13 Aug 2007 00:41:36 +0000 |
CVSROOT: /cvsroot/pspp
Module name: pspp
Changes by: Ben Pfaff <blp> 07/08/13 00:41:36
Modified files:
src/data : ChangeLog casewriter-provider.h
casewriter-translator.c casewriter.c
casewriter.h por-file-writer.c scratch-writer.c
sys-file-writer.c
src/language/data-io: ChangeLog get.c
src/math : sort.c
Log message:
Make casewriters keep track of the number of `union value's in each
case. This is useful for two reasons: casewriter_write can then check
that the case being written is large enough, and later recipients of
the casewriter can determine the size of the case.
* get.c (case_map_get_value_cnt): New function.
* casewriter-translator.c (casewriter_create_translator): Add
value_cnt parameter.
* casewriter.c (struct casewriter): Add value_cnt member.
(casewriter_write): Check that the case passed in is big enough.
(casewriter_get_value_cnt): New function.
(casewriter_create): Add value_cnt parameter.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/ChangeLog?cvsroot=pspp&r1=1.148&r2=1.149
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/casewriter-provider.h?cvsroot=pspp&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/casewriter-translator.c?cvsroot=pspp&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/casewriter.c?cvsroot=pspp&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/casewriter.h?cvsroot=pspp&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/por-file-writer.c?cvsroot=pspp&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/scratch-writer.c?cvsroot=pspp&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/sys-file-writer.c?cvsroot=pspp&r1=1.30&r2=1.31
http://cvs.savannah.gnu.org/viewcvs/pspp/src/language/data-io/ChangeLog?cvsroot=pspp&r1=1.42&r2=1.43
http://cvs.savannah.gnu.org/viewcvs/pspp/src/language/data-io/get.c?cvsroot=pspp&r1=1.37&r2=1.38
http://cvs.savannah.gnu.org/viewcvs/pspp/src/math/sort.c?cvsroot=pspp&r1=1.26&r2=1.27
Patches:
Index: data/ChangeLog
===================================================================
RCS file: /cvsroot/pspp/pspp/src/data/ChangeLog,v
retrieving revision 1.148
retrieving revision 1.149
diff -u -b -r1.148 -r1.149
--- data/ChangeLog 10 Aug 2007 00:16:18 -0000 1.148
+++ data/ChangeLog 13 Aug 2007 00:41:34 -0000 1.149
@@ -1,3 +1,19 @@
+2007-08-12 Ben Pfaff <address@hidden>
+
+ Make casewriters keep track of the number of `union value's in
+ each case. This is useful for two reasons: casewriter_write can
+ then check that the case being written is large enough, and later
+ recipients of the casewriter can determine the size of the case.
+
+ * casewriter-translator.c (casewriter_create_translator): Add
+ value_cnt parameter.
+
+ * casewriter.c (struct casewriter): Add value_cnt member.
+ (casewriter_write): Check that the case passed in is big enough.
+ (casewriter_get_value_cnt): New function.
+ (casewriter_create): Add value_cnt parameter.
+
+
2007-08-09 Ben Pfaff <address@hidden>
Fix bug reported by Jason Stover.
Index: data/casewriter-provider.h
===================================================================
RCS file: /cvsroot/pspp/pspp/src/data/casewriter-provider.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- data/casewriter-provider.h 7 Jul 2007 06:14:07 -0000 1.4
+++ data/casewriter-provider.h 13 Aug 2007 00:41:35 -0000 1.5
@@ -56,6 +56,7 @@
struct casereader *(*convert_to_reader) (struct casewriter *, void *aux);
};
-struct casewriter *casewriter_create (const struct casewriter_class *, void *);
+struct casewriter *casewriter_create (size_t value_cnt,
+ const struct casewriter_class *, void *);
#endif /* data/casewriter-provider.h */
Index: data/casewriter-translator.c
===================================================================
RCS file: /cvsroot/pspp/pspp/src/data/casewriter-translator.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- data/casewriter-translator.c 7 Jul 2007 06:14:07 -0000 1.4
+++ data/casewriter-translator.c 13 Aug 2007 00:41:35 -0000 1.5
@@ -39,6 +39,7 @@
struct casewriter *
casewriter_create_translator (struct casewriter *subwriter,
+ size_t translated_value_cnt,
void (*translate) (const struct ccase *input,
struct ccase *output,
void *aux),
@@ -51,7 +52,8 @@
ct->translate = translate;
ct->destroy = destroy;
ct->aux = aux;
- writer = casewriter_create (&casewriter_translator_class, ct);
+ writer = casewriter_create (translated_value_cnt,
+ &casewriter_translator_class, ct);
taint_propagate (casewriter_get_taint (ct->subwriter),
casewriter_get_taint (writer));
return writer;
Index: data/casewriter.c
===================================================================
RCS file: /cvsroot/pspp/pspp/src/data/casewriter.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- data/casewriter.c 7 Jul 2007 06:14:08 -0000 1.4
+++ data/casewriter.c 13 Aug 2007 00:41:35 -0000 1.5
@@ -35,6 +35,7 @@
struct casewriter
{
struct taint *taint;
+ size_t value_cnt;
casenumber case_cnt;
const struct casewriter_class *class;
void *aux;
@@ -47,6 +48,7 @@
void
casewriter_write (struct casewriter *writer, struct ccase *c)
{
+ assert (case_get_value_cnt (c) >= writer->value_cnt);
writer->class->write (writer, writer->aux, c);
}
@@ -67,6 +69,14 @@
return ok;
}
+/* Returns the number of `union value's in each case written to
+ WRITER. */
+size_t
+casewriter_get_value_cnt (const struct casewriter *writer)
+{
+ return writer->value_cnt;
+}
+
/* Destroys WRITER and in its place returns a casereader that can
be used to read back the data written to WRITER. WRITER must
not be used again after calling this function, even as an
@@ -133,12 +143,15 @@
}
/* Creates and returns a new casewriter with the given CLASS and
- auxiliary data AUX. */
+ auxiliary data AUX. The casewriter accepts cases with
+ VALUE_CNT `union value's. */
struct casewriter *
-casewriter_create (const struct casewriter_class *class, void *aux)
+casewriter_create (size_t value_cnt,
+ const struct casewriter_class *class, void *aux)
{
struct casewriter *writer = xmalloc (sizeof *writer);
writer->taint = taint_create ();
+ writer->value_cnt = value_cnt;
writer->case_cnt = 0;
writer->class = class;
writer->aux = aux;
@@ -196,7 +209,8 @@
create_casewriter_window (size_t value_cnt, casenumber max_in_core_cases)
{
struct casewindow *window = casewindow_create (value_cnt, max_in_core_cases);
- struct casewriter *writer = casewriter_create (&casewriter_window_class,
+ struct casewriter *writer = casewriter_create (value_cnt,
+ &casewriter_window_class,
window);
taint_propagate (casewindow_get_taint (window),
casewriter_get_taint (writer));
Index: data/casewriter.h
===================================================================
RCS file: /cvsroot/pspp/pspp/src/data/casewriter.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- data/casewriter.h 7 Jul 2007 06:14:08 -0000 1.4
+++ data/casewriter.h 13 Aug 2007 00:41:35 -0000 1.5
@@ -27,6 +27,8 @@
void casewriter_write (struct casewriter *, struct ccase *);
bool casewriter_destroy (struct casewriter *);
+size_t casewriter_get_value_cnt (const struct casewriter *);
+
struct casereader *casewriter_make_reader (struct casewriter *);
struct casewriter *casewriter_rename (struct casewriter *);
@@ -40,7 +42,7 @@
struct casewriter *autopaging_writer_create (size_t value_cnt);
struct casewriter *
-casewriter_create_translator (struct casewriter *,
+casewriter_create_translator (struct casewriter *, size_t translated_value_cnt,
void (*translate) (const struct ccase *input,
struct ccase *output,
void *aux),
Index: data/por-file-writer.c
===================================================================
RCS file: /cvsroot/pspp/pspp/src/data/por-file-writer.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- data/por-file-writer.c 29 Jul 2007 05:40:52 -0000 1.16
+++ data/por-file-writer.c 13 Aug 2007 00:41:35 -0000 1.17
@@ -166,7 +166,8 @@
buf_write (w, "F", 1);
if (ferror (w->file))
goto error;
- return casewriter_create (&por_file_casewriter_class, w);
+ return casewriter_create (dict_get_next_value_idx (dict),
+ &por_file_casewriter_class, w);
error:
close_writer (w);
Index: data/scratch-writer.c
===================================================================
RCS file: /cvsroot/pspp/pspp/src/data/scratch-writer.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- data/scratch-writer.c 7 Jul 2007 06:14:09 -0000 1.7
+++ data/scratch-writer.c 13 Aug 2007 00:41:35 -0000 1.8
@@ -56,6 +56,7 @@
struct dictionary *scratch_dict;
struct dict_compactor *compactor;
struct casewriter *casewriter;
+ size_t dict_value_cnt;
if (!fh_open (fh, FH_REF_SCRATCH, "scratch file", "we"))
return NULL;
@@ -74,6 +75,7 @@
}
else
compactor = NULL;
+ dict_value_cnt = dict_get_next_value_idx (scratch_dict);
/* Create new contents. */
sh = xmalloc (sizeof *sh);
@@ -85,11 +87,11 @@
writer->handle = sh;
writer->fh = fh;
writer->compactor = compactor;
- writer->subwriter = autopaging_writer_create (dict_get_next_value_idx (
- scratch_dict));
+ writer->subwriter = autopaging_writer_create (dict_value_cnt);
fh_set_scratch_handle (fh, sh);
- casewriter = casewriter_create (&scratch_writer_casewriter_class, writer);
+ casewriter = casewriter_create (dict_value_cnt,
+ &scratch_writer_casewriter_class, writer);
taint_propagate (casewriter_get_taint (writer->subwriter),
casewriter_get_taint (casewriter));
return casewriter;
Index: data/sys-file-writer.c
===================================================================
RCS file: /cvsroot/pspp/pspp/src/data/sys-file-writer.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- data/sys-file-writer.c 25 Jul 2007 04:31:34 -0000 1.30
+++ data/sys-file-writer.c 13 Aug 2007 00:41:35 -0000 1.31
@@ -238,7 +238,8 @@
if (write_error (w))
goto error;
- return casewriter_create (&sys_file_casewriter_class, w);
+ return casewriter_create (dict_get_next_value_idx (d),
+ &sys_file_casewriter_class, w);
error:
close_writer (w);
Index: language/data-io/ChangeLog
===================================================================
RCS file: /cvsroot/pspp/pspp/src/language/data-io/ChangeLog,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- language/data-io/ChangeLog 26 Jul 2007 01:52:04 -0000 1.42
+++ language/data-io/ChangeLog 13 Aug 2007 00:41:35 -0000 1.43
@@ -1,3 +1,7 @@
+2007-08-12 Ben Pfaff <address@hidden>
+
+ * get.c (case_map_get_value_cnt): New function.
+
2007-07-25 Ben Pfaff <address@hidden>
Fix bug #17100.
Index: language/data-io/get.c
===================================================================
RCS file: /cvsroot/pspp/pspp/src/language/data-io/get.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -b -r1.37 -r1.38
--- language/data-io/get.c 12 Jul 2007 04:30:12 -0000 1.37
+++ language/data-io/get.c 13 Aug 2007 00:41:35 -0000 1.38
@@ -54,6 +54,7 @@
static void map_case (const struct case_map *,
const struct ccase *, struct ccase *);
static void destroy_case_map (struct case_map *);
+static size_t case_map_get_value_cnt (const struct case_map *);
static bool parse_dict_trim (struct lexer *, struct dictionary *);
@@ -358,6 +359,7 @@
map = finish_case_map (dict);
if (map != NULL)
writer = casewriter_create_translator (writer,
+ case_map_get_value_cnt (map),
get_translate_case,
get_destroy_case_map,
map);
@@ -1442,3 +1444,11 @@
free (map);
}
}
+
+/* Returns the number of `union value's in cases created by
+ MAP. */
+static size_t
+case_map_get_value_cnt (const struct case_map *map)
+{
+ return map->value_cnt;
+}
Index: math/sort.c
===================================================================
RCS file: /cvsroot/pspp/pspp/src/math/sort.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- math/sort.c 7 Jul 2007 06:14:23 -0000 1.26
+++ math/sort.c 13 Aug 2007 00:41:35 -0000 1.27
@@ -63,6 +63,7 @@
struct casewriter *
sort_create_writer (struct case_ordering *ordering)
{
+ size_t value_cnt = case_ordering_get_value_cnt (ordering);
struct sort_writer *sort;
sort = xmalloc (sizeof *sort);
@@ -75,7 +76,7 @@
case_ordering_destroy (ordering);
- return casewriter_create (&sort_casewriter_class, sort);
+ return casewriter_create (value_cnt, &sort_casewriter_class, sort);
}
static void
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pspp-cvs] pspp/src data/ChangeLog data/casewriter-provide...,
Ben Pfaff <=