commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From er...@apache.org
Subject svn commit: r1410990 - in /commons/proper/math/trunk/src: changes/changes.xml main/java/org/apache/commons/math3/random/SynchronizedRandomGenerator.java
Date Sun, 18 Nov 2012 21:00:35 GMT
Author: erans
Date: Sun Nov 18 21:00:34 2012
New Revision: 1410990

URL: http://svn.apache.org/viewvc?rev=1410990&view=rev
Log:
MATH-899
Added wrapper class that allows thread-safe usage of any "RandomGenerator".

Added:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/SynchronizedRandomGenerator.java
  (with props)
Modified:
    commons/proper/math/trunk/src/changes/changes.xml

Modified: commons/proper/math/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/changes/changes.xml?rev=1410990&r1=1410989&r2=1410990&view=diff
==============================================================================
--- commons/proper/math/trunk/src/changes/changes.xml (original)
+++ commons/proper/math/trunk/src/changes/changes.xml Sun Nov 18 21:00:34 2012
@@ -52,6 +52,11 @@ If the output is not quite correct, chec
   <body>
     <release version="3.1" date="TBD" description="
 ">
+      <action dev="erans" type="add" issue="MATH-899">
+        Added a new "SynchronizedRandomGenerator" that wraps another
+        "RandomGenerator" with all methods being synchronized, thus
+        rendering the code thread-safe (at some efficiency cost).
+      </action>
       <action dev="tn" type="add" issue="MATH-893" due-to="Patrick Meyer">
         Add new "NaNStrategy": FAILED, used in "RankingAlgorithm" implementations.
         Any encountered input value that succeeds a "Double#isNaN" check, results in a

Added: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/SynchronizedRandomGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/SynchronizedRandomGenerator.java?rev=1410990&view=auto
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/SynchronizedRandomGenerator.java
(added)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/SynchronizedRandomGenerator.java
Sun Nov 18 21:00:34 2012
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.math3.random;
+
+/**
+ * Any {@link RandomGenerator} implementation can be thread-safe if it
+ * is used through an instance of this class.
+ * This is achieved by enclosing calls to the methods of the actual
+ * generator inside the overridden {@code synchronized} methods of this
+ * class.
+ *
+ * @since 3.1
+ * @version $Id$
+ */
+public class SynchronizedRandomGenerator implements RandomGenerator {
+    /** Object to which all calls will be delegated. */
+    private final RandomGenerator wrapped;
+
+    /**
+     * Creates a synchronized wrapper for the given {@code RandomGenerator}
+     * instance.
+     *
+     * @param rng Generator whose methods will be called through
+     * their corresponding overridden synchronized version.
+     * To ensure thread-safety, the wrapped generator <em>must</em>
+     * not be used directly.
+     */
+    public SynchronizedRandomGenerator(RandomGenerator rng) {
+        wrapped = rng;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized void setSeed(int seed) {
+        wrapped.setSeed(seed);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized void setSeed(int[] seed) {
+        wrapped.setSeed(seed);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized void setSeed(long seed) {
+        wrapped.setSeed(seed);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized void nextBytes(byte[] bytes) {
+        wrapped.nextBytes(bytes);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized int nextInt() {
+        return wrapped.nextInt();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized int nextInt(int n) {
+        return wrapped.nextInt();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized long nextLong() {
+        return wrapped.nextLong();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized boolean nextBoolean() {
+        return wrapped.nextBoolean();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized float nextFloat() {
+        return wrapped.nextFloat();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized double nextDouble() {
+        return wrapped.nextDouble();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public synchronized double nextGaussian() {
+        return wrapped.nextGaussian();
+    }
+}

Propchange: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/SynchronizedRandomGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message