Separate random numbers from other settings because of GSL dependency.
authorBen Pfaff <blp@gnu.org>
Sun, 11 Dec 2005 07:35:50 +0000 (07:35 +0000)
committerBen Pfaff <blp@gnu.org>
Sun, 11 Dec 2005 07:35:50 +0000 (07:35 +0000)
src/ChangeLog
src/Makefile.am
src/expressions/helpers.h
src/glob.c
src/random.c [new file with mode: 0644]
src/random.h [new file with mode: 0644]
src/sample.c
src/set.q
src/settings.c
src/settings.h

index 1fc5fef1f7b28e25ffae2ed6440764f199911674..a94b5ef53e595c2eda53d94229d893500168dfcc 100644 (file)
@@ -1,3 +1,22 @@
+Sat Dec 10 23:30:19 2005  Ben Pfaff  <blp@gnu.org>
+
+       Separate random numbers from other settings because of GSL
+       dependency.
+
+       * Makefile.am: Add random.c, random.h to sources.
+
+       * glob.c: (init_glob) Call random_init().
+       (done_glob) Call random_done().
+
+       * settings.c: (static var rng) Move to random.c.
+       (done_settings) Move freeing of RNG to random_done().
+       (get_rng) Move to random.c
+       (set_rng) Ditto.
+
+       * random.c: New file.
+
+       * random.h: New file.
+
 Sat Dec 10 18:13:36 2005  Ben Pfaff  <blp@gnu.org>
 
        Separate settings and the SET command, for modularity.
index 857dd8a59b13476459a77c9e9d9febb67202fa61..5289af2b1f38e974597248b22f5e2264d70ca347 100644 (file)
@@ -187,6 +187,8 @@ pspp_SOURCES =                                      \
        pool.h                                  \
        postscript.c                            \
        print.c                                 \
+       random.c                                \
+       random.h                                \
        range-prs.c                             \
        range-prs.h                             \
        recode.c                                \
index 4011d843def35d74877cabcaa0db53596af10720..a3fbdb02f7aa18f4783d037cf68c45b7bad4a97b 100644 (file)
@@ -17,6 +17,7 @@
 #include "gsl-extras/gsl-extras.h"
 #include "misc.h"
 #include "moments.h"
+#include "random.h"
 #include "settings.h"
 #include "str.h"
 #include "val.h"
index 47db10ea780680f46045cca06a959a2ffdd427d4..38dd32373801a0be277d9137fefb81778979d0a5 100644 (file)
@@ -71,6 +71,7 @@ extern void stifle_history ();
 #include "lexer.h"
 #include "magic.h"
 #include "main.h"
+#include "random.h"
 #include "settings.h"
 #include "str.h"
 #include "var.h"
@@ -160,7 +161,8 @@ init_glob (int argc UNUSED, char **argv)
   }
 
 
-  init_settings();
+  init_settings ();
+  random_init ();
 
   /* log.h */
   logging = 1;
@@ -176,6 +178,7 @@ done_glob(void)
   cancel_transformations ();
   dict_destroy (default_dict);
   free (logfn);
+  random_done ();
   done_settings ();
   ds_destroy (&tokstr);
 
diff --git a/src/random.c b/src/random.c
new file mode 100644 (file)
index 0000000..7420a82
--- /dev/null
@@ -0,0 +1,57 @@
+/* PSPP - computes sample statistics.
+   Copyright (C) 1997-9, 2000, 2005 Free Software Foundation, Inc.
+   Written by Ben Pfaff <blp@gnu.org>.
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
+
+#include <config.h>
+#include "random.h"
+#include <time.h>
+#include "xalloc.h"
+
+static gsl_rng *rng;
+
+void
+random_init (void) 
+{
+}
+
+void
+random_done (void) 
+{
+  if (rng != NULL) 
+    gsl_rng_free (rng);
+}
+
+/* Returns the current random number generator. */
+gsl_rng *
+get_rng (void)
+{
+  if (rng == NULL)
+    set_rng (time (0));
+  return rng;
+}
+
+/* Initializes or reinitializes the random number generator with
+   the given SEED. */
+void
+set_rng (unsigned long seed) 
+{
+  rng = gsl_rng_alloc (gsl_rng_mt19937);
+  if (rng == NULL)
+    xalloc_die ();
+  gsl_rng_set (rng, seed);
+}
diff --git a/src/random.h b/src/random.h
new file mode 100644 (file)
index 0000000..8595967
--- /dev/null
@@ -0,0 +1,31 @@
+/* PSPP - computes sample statistics.
+   Copyright (C) 1997-9, 2000, 2005 Free Software Foundation, Inc.
+   Written by Ben Pfaff <blp@gnu.org>.
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
+
+#ifndef RANDOM_H
+#define RANDOM_H 1
+
+#include <gsl/gsl_rng.h>
+
+void random_init (void);
+void random_done (void);
+
+gsl_rng *get_rng (void);
+void set_rng (unsigned long seed);
+
+#endif /* random.h */
index fceadbbbf37e72a9ef0b0846419407e41e227115..0255ae79ee21a210411a64c7100a8973acb48a15 100644 (file)
@@ -26,7 +26,7 @@
 #include "command.h"
 #include "error.h"
 #include "lexer.h"
-#include "settings.h"
+#include "random.h"
 #include "str.h"
 #include "var.h"
 
index 9e045fb7ce7981472695601e6d77be4b10ae595d..8fb3a8076835d943b2adb8a0150c1ccb3f7db10e 100644 (file)
--- a/src/set.q
+++ b/src/set.q
@@ -32,6 +32,7 @@
 #include "magic.h"
 #include "log.h"
 #include "output.h"
+#include "random.h"
 #include "var.h"
 #include "format.h"
 #include "copyleft.h"
index 749757bc6fd9526d4cd7e938f9fb8dce4d9f95be..4961b564e8bcca1dc5e0b8c303eca05d4019c12d 100644 (file)
@@ -20,6 +20,7 @@
 #include <config.h>
 #include "settings.h"
 #include <assert.h>
+#include <stdlib.h>
 #include <time.h>
 #include "format.h"
 #include "val.h"
@@ -77,8 +78,6 @@ static struct custom_currency cc[CC_CNT] =
     CC_INITIALIZER,
   };
 
-static gsl_rng *rng;
-
 static bool testing_mode = false;
 
 static int global_algorithm = ENHANCED;
@@ -92,9 +91,6 @@ static void init_viewport (void);
 void
 done_settings (void)
 {
-  if (rng != NULL) 
-    gsl_rng_free (rng);
-
   free (prompt);
   free (cprompt);
   free (dprompt);
@@ -494,7 +490,7 @@ set_endcmd (char endcmd_)
 /* Approximate maximum amount of memory to use for cases, in
    bytes. */
 size_t
-get_workspace(void)
+get_workspace (void)
 {
   return workspace;
 }
@@ -540,26 +536,6 @@ set_cc (int idx, const struct custom_currency *cc_)
   cc[idx] = *cc_;
 }
 
-/* Returns the current random number generator. */
-gsl_rng *
-get_rng (void)
-{
-  if (rng == NULL)
-    set_rng (time (0));
-  return rng;
-}
-
-/* Initializes or reinitializes the random number generator with
-   the given SEED. */
-void
-set_rng (unsigned long seed) 
-{
-  rng = gsl_rng_alloc (gsl_rng_mt19937);
-  if (rng == NULL)
-    xalloc_die ();
-  gsl_rng_set (rng, seed);
-}
-
 /* Are we in testing mode?  (e.g. --testing-mode command line
    option) */
 bool
index 9e6209250da9b2fcfae9f2c31f0691e9ea3491e4..0593f2d10c2ce8a59815d1e457c525eba28fbf2f 100644 (file)
@@ -116,11 +116,6 @@ struct custom_currency
 const struct custom_currency *get_cc (int idx);
 void set_cc (int idx, const struct custom_currency *);
 
-#include <gsl/gsl_rng.h>
-
-gsl_rng *get_rng (void);
-void set_rng (unsigned long seed);
-
 bool get_testing_mode (void);
 void set_testing_mode (bool);