You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2022/05/16 20:54:23 UTC
[commons-rng] 03/05: RNG-176: Remove redundant methods from core module
This is an automated email from the ASF dual-hosted git repository.
aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git
commit f3df9db1005142c24cb96ea0b9807282166d3718
Author: aherbert <ah...@apache.org>
AuthorDate: Fri May 13 11:40:46 2022 +0100
RNG-176: Remove redundant methods from core module
The methods are now present as default implementations in the client-api
UniformRandomProvider.
This requires JApiCmp is disabled as it does not recognise the change as
compatible. Binary compatibility is checked by revapi which allows this
change.
---
.../org/apache/commons/rng/core/BaseProvider.java | 43 --------
.../commons/rng/core/source32/IntProvider.java | 6 --
.../commons/rng/core/source64/LongProvider.java | 117 ---------------------
.../{profile.japicmp => profile.japicmp.disabled} | 5 +
4 files changed, 5 insertions(+), 166 deletions(-)
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/BaseProvider.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/BaseProvider.java
index 29929b0a..ed6d6a35 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/BaseProvider.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/BaseProvider.java
@@ -26,10 +26,6 @@ import org.apache.commons.rng.RandomProviderState;
*/
public abstract class BaseProvider
implements RestorableUniformRandomProvider {
- /** Error message when an integer is not positive. */
- private static final String NOT_POSITIVE = "Must be strictly positive: ";
- /** 2^32. */
- private static final long POW_32 = 1L << 32;
/**
* The fractional part of the the golden ratio, phi, scaled to 64-bits and rounded to odd.
* <pre>
@@ -41,45 +37,6 @@ public abstract class BaseProvider
/** The fractional part of the the golden ratio, phi, scaled to 32-bits and rounded to odd. */
private static final int GOLDEN_RATIO_32 = 0x9e3779b9;
- /** {@inheritDoc} */
- @Override
- public int nextInt(int n) {
- if (n <= 0) {
- throw new IllegalArgumentException(NOT_POSITIVE + n);
- }
-
- // Lemire (2019): Fast Random Integer Generation in an Interval
- // https://arxiv.org/abs/1805.10941
- long m = (nextInt() & 0xffffffffL) * n;
- long l = m & 0xffffffffL;
- if (l < n) {
- // 2^32 % n
- final long t = POW_32 % n;
- while (l < t) {
- m = (nextInt() & 0xffffffffL) * n;
- l = m & 0xffffffffL;
- }
- }
- return (int) (m >>> 32);
- }
-
- /** {@inheritDoc} */
- @Override
- public long nextLong(long n) {
- if (n <= 0) {
- throw new IllegalArgumentException(NOT_POSITIVE + n);
- }
-
- long bits;
- long val;
- do {
- bits = nextLong() >>> 1;
- val = bits % n;
- } while (bits - val + (n - 1) < 0);
-
- return val;
- }
-
/** {@inheritDoc} */
@Override
public RandomProviderState saveState() {
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/IntProvider.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/IntProvider.java
index 37ee878e..cbf4a857 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/IntProvider.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/IntProvider.java
@@ -120,12 +120,6 @@ public abstract class IntProvider
return NumberFactory.makeDouble(next(), next());
}
- /** {@inheritDoc} */
- @Override
- public float nextFloat() {
- return NumberFactory.makeFloat(next());
- }
-
/** {@inheritDoc} */
@Override
public long nextLong() {
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/LongProvider.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/LongProvider.java
index 940a58b3..ec5bafcd 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/LongProvider.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/LongProvider.java
@@ -132,12 +132,6 @@ public abstract class LongProvider
return (int) bits;
}
- /** {@inheritDoc} */
- @Override
- public double nextDouble() {
- return NumberFactory.makeDouble(next());
- }
-
/** {@inheritDoc} */
@Override
public boolean nextBoolean() {
@@ -153,115 +147,4 @@ public abstract class LongProvider
booleanSource = bits >>> 1;
return (bits & 0x1) == 1;
}
-
- /** {@inheritDoc} */
- @Override
- public float nextFloat() {
- return NumberFactory.makeFloat(nextInt());
- }
-
- /** {@inheritDoc} */
- @Override
- public void nextBytes(byte[] bytes) {
- nextBytesFill(this, bytes, 0, bytes.length);
- }
-
- /** {@inheritDoc} */
- @Override
- public void nextBytes(byte[] bytes,
- int start,
- int len) {
- checkFromIndexSize(start, len, bytes.length);
- nextBytesFill(this, bytes, start, len);
- }
-
- /**
- * Generates random bytes and places them into a user-supplied array.
- *
- * <p>
- * The array is filled with bytes extracted from random {@code long} values.
- * This implies that the number of random bytes generated may be larger than
- * the length of the byte array.
- * </p>
- *
- * @param source Source of randomness.
- * @param bytes Array in which to put the generated bytes. Cannot be null.
- * @param start Index at which to start inserting the generated bytes.
- * @param len Number of bytes to insert.
- */
- static void nextBytesFill(RandomLongSource source,
- byte[] bytes,
- int start,
- int len) {
- int index = start; // Index of first insertion.
-
- // Index of first insertion plus multiple of 8 part of length
- // (i.e. length with 3 least significant bits unset).
- final int indexLoopLimit = index + (len & 0x7ffffff8);
-
- // Start filling in the byte array, 8 bytes at a time.
- while (index < indexLoopLimit) {
- final long random = source.next();
- bytes[index++] = (byte) random;
- bytes[index++] = (byte) (random >>> 8);
- bytes[index++] = (byte) (random >>> 16);
- bytes[index++] = (byte) (random >>> 24);
- bytes[index++] = (byte) (random >>> 32);
- bytes[index++] = (byte) (random >>> 40);
- bytes[index++] = (byte) (random >>> 48);
- bytes[index++] = (byte) (random >>> 56);
- }
-
- final int indexLimit = start + len; // Index of last insertion + 1.
-
- // Fill in the remaining bytes.
- if (index < indexLimit) {
- long random = source.next();
- while (true) {
- bytes[index++] = (byte) random;
- if (index < indexLimit) {
- random >>>= 8;
- } else {
- break;
- }
- }
- }
- }
-
- /**
- * Checks if the sub-range from fromIndex (inclusive) to fromIndex + size (exclusive) is
- * within the bounds of range from 0 (inclusive) to length (exclusive).
- *
- * <p>This function provides the functionality of
- * {@code java.utils.Objects.checkFromIndexSize} introduced in JDK 9. The
- * <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Objects.html#checkFromIndexSize(int,int,int)">Objects</a>
- * javadoc has been reproduced for reference.
- *
- * <p>The sub-range is defined to be out of bounds if any of the following inequalities
- * is true:
- * <ul>
- * <li>{@code fromIndex < 0}
- * <li>{@code size < 0}
- * <li>{@code fromIndex + size > length}, taking into account integer overflow
- * <li>{@code length < 0}, which is implied from the former inequalities
- * </ul>
- *
- * @param fromIndex the lower-bound (inclusive) of the sub-interval
- * @param size the size of the sub-range
- * @param length the upper-bound (exclusive) of the range
- * @return the fromIndex
- * @throws IndexOutOfBoundsException if the sub-range is out of bounds
- */
- private static int checkFromIndexSize(int fromIndex, int size, int length) {
- // check for any negatives,
- // or overflow safe length check given the values are all positive
- // remaining = length - fromIndex
- if ((fromIndex | size | length) < 0 || size > length - fromIndex) {
- throw new IndexOutOfBoundsException(
- // Note: %<d is 'relative indexing' to re-use the last argument
- String.format("Range [%d, %<d + %d) out of bounds for length %d",
- fromIndex, size, length));
- }
- return fromIndex;
- }
}
diff --git a/commons-rng-core/src/site/resources/profile.japicmp b/commons-rng-core/src/site/resources/profile.japicmp.disabled
similarity index 83%
rename from commons-rng-core/src/site/resources/profile.japicmp
rename to commons-rng-core/src/site/resources/profile.japicmp.disabled
index 6fe28ff3..1334b03e 100644
--- a/commons-rng-core/src/site/resources/profile.japicmp
+++ b/commons-rng-core/src/site/resources/profile.japicmp.disabled
@@ -15,3 +15,8 @@
# -----------------------------------------------------------------------------
#
# Empty file used to automatically trigger profile from commons parent pom
+#
+# TODO: Enable JApiCmp
+# This has been disabled for the 1.4 to 1.5 comparison.
+# JApiCmp does not recognise methods moved from a class to a default
+# implementation in an interface.