* casereader-translator.c (struct casereader_translator): Change
authorBen Pfaff <blp@gnu.org>
Wed, 12 Sep 2007 13:43:49 +0000 (13:43 +0000)
committerBen Pfaff <blp@gnu.org>
Wed, 12 Sep 2007 13:43:49 +0000 (13:43 +0000)
input case parameter of translate member function from const
struct ccase * to struct ccase *.
(casereader_create_translator): Ditto, for translate parameter.

* casewriter-translator.c (struct casewriter_translator): Ditto.
(casewriter_create_translator): Ditto.

* get.c (get_translate_case): Change input case parameter from
const struct ccase * to struct ccase *, to match change in
casereader and casewriter translators.  Destroy input case, to fix
memory leak.

src/data/ChangeLog
src/data/casereader-translator.c
src/data/casereader.h
src/data/casewriter-translator.c
src/data/casewriter.h
src/language/data-io/ChangeLog
src/language/data-io/get.c

index 73cf8a1caa56450264f00faa09577db992914942..bc89aef70a2b4e1a093d866d4c5e750c6c0bb168 100644 (file)
@@ -1,3 +1,16 @@
+2007-09-12  Ben Pfaff  <blp@gnu.org>
+
+       Make it clear that translator casereader and casewriter translate
+       functions are supposed to destroy their input case.
+       
+       * casereader-translator.c (struct casereader_translator): Change
+       input case parameter of translate member function from const
+       struct ccase * to struct ccase *.
+       (casereader_create_translator): Ditto, for translate parameter.
+
+       * casewriter-translator.c (struct casewriter_translator): Ditto.
+       (casewriter_create_translator): Ditto.
+
 2007-08-27  John Darrinton <john@darrington.wattle.id.au>
        
        * sys-file-reader.c (read_display_parameters): Force display width 
@@ -32,7 +45,7 @@
        dict_make_compactor.
        (scratch_writer_casewriter_write): Use case_map_execute instead of
        dict_compactor_compact.
-o
+
 2007-08-12  Ben Pfaff  <blp@gnu.org>
 
        * automake.mk: Add case-map.c, case-map.h.
index 523afe3fd0d9a757f5eff40c091ea372a281669d..5a717da8252a15de221728734e39e0d6f4210aab 100644 (file)
@@ -33,8 +33,7 @@ struct casereader_translator
   {
     struct casereader *subreader; /* Source of input cases. */
 
-    void (*translate) (const struct ccase *input, struct ccase *output,
-                       void *aux);
+    void (*translate) (struct ccase *input, struct ccase *output, void *aux);
     bool (*destroy) (void *aux);
     void *aux;
   };
@@ -56,7 +55,7 @@ static struct casereader_class casereader_translator_class;
 struct casereader *
 casereader_create_translator (struct casereader *subreader,
                               size_t output_value_cnt,
-                              void (*translate) (const struct ccase *input,
+                              void (*translate) (struct ccase *input,
                                                  struct ccase *output,
                                                  void *aux),
                               bool (*destroy) (void *aux),
index 31e448fbc2215ccc00f9fb087307c283246edf7e..d4a1cce5188a7a467569cbceb95ec9f30a1db402 100644 (file)
@@ -105,7 +105,7 @@ casereader_create_counter (struct casereader *, casenumber *counter,
 
 struct casereader *
 casereader_create_translator (struct casereader *, size_t output_value_cnt,
-                              void (*translate) (const struct ccase *input,
+                              void (*translate) (struct ccase *input,
                                                  struct ccase *output,
                                                  void *aux),
                               bool (*destroy) (void *aux),
index 526bba34900b8b0d239a52e279923cdb4a52076a..79694a4609469f6deee93f9eccfab44212ef7ef6 100644 (file)
@@ -29,18 +29,29 @@ struct casewriter_translator
   {
     struct casewriter *subwriter;
 
-    void (*translate) (const struct ccase *input, struct ccase *output,
-                       void *aux);
+    void (*translate) (struct ccase *input, struct ccase *output, void *aux);
     bool (*destroy) (void *aux);
     void *aux;
   };
 
 static struct casewriter_class casewriter_translator_class;
 
+/* Creates and returns a new casewriter whose cases are passed
+   through TRANSLATE, which must create case OUTPUT, with
+   OUTPUT_VALUE_CNT values, and populate it based on INPUT and
+   auxiliary data AUX.  The translated cases are then written to
+   SUBWRITER.  TRANSLATE must also destroy INPUT.
+
+   When the translating casewriter is destroyed, DESTROY will be
+   called to allow any state maintained by TRANSLATE to be freed.
+
+   After this function is called, SUBWRITER must not ever again
+   be referenced directly.  It will be destroyed automatically
+   when the translating casewriter is destroyed. */
 struct casewriter *
 casewriter_create_translator (struct casewriter *subwriter,
                               size_t translated_value_cnt,
-                              void (*translate) (const struct ccase *input,
+                              void (*translate) (struct ccase *input,
                                                  struct ccase *output,
                                                  void *aux),
                               bool (*destroy) (void *aux),
index 87bf6f6abd9f2c398399b903c4654b5c702140af..a92c417680116ffbfc438e52877b64f74f62e1e3 100644 (file)
@@ -43,7 +43,7 @@ struct casewriter *autopaging_writer_create (size_t value_cnt);
 \f
 struct casewriter *
 casewriter_create_translator (struct casewriter *, size_t translated_value_cnt,
-                              void (*translate) (const struct ccase *input,
+                              void (*translate) (struct ccase *input,
                                                  struct ccase *output,
                                                  void *aux),
                               bool (*destroy) (void *aux),
index 8eece80b6b055018038c964fef3a13c6263cf1cc..572aacd5a7700838d5b8a1735e58c3be4ff90185 100644 (file)
@@ -1,3 +1,10 @@
+2007-09-12  Ben Pfaff  <blp@gnu.org>
+
+       * get.c (get_translate_case): Change input case parameter from
+       const struct ccase * to struct ccase *, to match change in
+       casereader and casewriter translators.  Destroy input case, to fix
+       memory leak.
+
 2007-08-12  Ben Pfaff  <blp@gnu.org>
 
        * get.c (parse_read_command): Compact the values in the target
index 22ae6feb601579f02e0ef96b78b5fc4c82e7b8e9..abfc62472a3b50e11bbf61bfaa5e9ac5c18acf23 100644 (file)
@@ -60,8 +60,7 @@ enum reader_command
     IMPORT_CMD
   };
 
-static void get_translate_case (const struct ccase *, struct ccase *,
-                                void *map_);
+static void get_translate_case (struct ccase *, struct ccase *, void *map_);
 static bool get_destroy_case_map (void *map_);
 
 /* Parses a GET or IMPORT command. */
@@ -143,11 +142,12 @@ parse_read_command (struct lexer *lexer, struct dataset *ds, enum reader_command
 }
 
 static void
-get_translate_case (const struct ccase *input, struct ccase *output,
+get_translate_case (struct ccase *input, struct ccase *output,
                     void *map_)
 {
   struct case_map *map = map_;
   case_map_execute (map, input, output);
+  case_destroy (input);
 }
 
 static bool