pspp-cvs
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]