In a couple of places we calculate the maximum number of cases to keep
authorBen Pfaff <blp@gnu.org>
Thu, 7 Jun 2007 05:15:58 +0000 (05:15 +0000)
committerBen Pfaff <blp@gnu.org>
Thu, 7 Jun 2007 05:15:58 +0000 (05:15 +0000)
in memory based on the user-defined workspace.  Enable centralizing
the calculation through a new function.

src/data/ChangeLog
src/data/settings.c
src/data/settings.h

index 3e0ebf62675adc2b6e5be5c9259c54e34e2c9c0a..b783f78d3352b9c3adf631189a5af1b3a707a32b 100644 (file)
@@ -1,3 +1,11 @@
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       In a couple of places we calculate the maximum number of cases to
+       keep in memory based on the user-defined workspace.  Enable
+       centralizing the calculation through a new function.
+       
+       * settings.c (get_workspace_cases): New function.
+
 2007-06-06  Ben Pfaff  <blp@gnu.org>
 
        The casenumber type is defined in transformations.h, but case.h is
index 3248324ea3a42640d95acf697a2813d21df123f6..5f769a5222083cb21a4a9e5731d23740e2680145 100644 (file)
@@ -425,6 +425,16 @@ get_workspace (void)
   return workspace;
 }
 
+/* Approximate maximum number of cases to allocate in-core, given
+   that each case contains VALUE_CNT values. */
+size_t
+get_workspace_cases (size_t value_cnt) 
+{
+  size_t case_size = sizeof (union value) * value_cnt + 4 * sizeof (void *);
+  size_t case_cnt = MAX (get_workspace () / case_size, 4);
+  return case_cnt;
+}
+
 /* Set approximate maximum amount of memory to use for cases, in
    bytes. */
 
index 61e64e0f135d06247a48381ecedd13e42db498fb..b104e8a27a6cc93de0f4ae7df4057cad67c2ec5c 100644 (file)
@@ -79,6 +79,7 @@ char get_endcmd (void);
 void set_endcmd (char);
 
 size_t get_workspace (void);
+size_t get_workspace_cases (size_t value_cnt);
 void set_workspace (size_t);
 
 const struct fmt_spec *get_format (void);