8265137: java.util.Random suddenly has new public methods nowhere documented

Reviewed-by: uschindler, darcy, smarks
This commit is contained in:
Jim Laskey 2021-05-04 11:53:07 +00:00
parent aa90df6f51
commit 05e601748a
4 changed files with 126 additions and 274 deletions

View file

@ -27,15 +27,12 @@ package java.util;
import java.io.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.random.RandomGenerator;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import jdk.internal.util.random.RandomSupport.*;
import jdk.internal.util.random.RandomSupport.AbstractSpliteratorGenerator;
import jdk.internal.util.random.RandomSupport.RandomGeneratorProperties;
import jdk.internal.util.random.RandomSupport.RandomIntsSpliterator;
import jdk.internal.util.random.RandomSupport.RandomLongsSpliterator;
import jdk.internal.util.random.RandomSupport.RandomDoublesSpliterator;
import static jdk.internal.util.random.RandomSupport.*;
import jdk.internal.misc.Unsafe;
@ -85,8 +82,7 @@ import jdk.internal.misc.Unsafe;
i = 48, j = 0, k = 0,
equidistribution = 0
)
public class Random extends AbstractSpliteratorGenerator
implements java.io.Serializable {
public class Random implements RandomGenerator, java.io.Serializable {
/** use serialVersionUID from JDK 1.1 for interoperability */
@java.io.Serial
static final long serialVersionUID = 3905348978240129619L;
@ -615,32 +611,6 @@ public class Random extends AbstractSpliteratorGenerator
unsafe.putReferenceVolatile(this, seedOffset, new AtomicLong(seedVal));
}
// Methods required by class AbstractSpliteratorGenerator
/**
* @hidden
*/
@Override
public Spliterator.OfInt makeIntsSpliterator(long index, long fence, int origin, int bound) {
return new RandomIntsSpliterator(this, index, fence, origin, bound);
}
/**
* @hidden
*/
@Override
public Spliterator.OfLong makeLongsSpliterator(long index, long fence, long origin, long bound) {
return new RandomLongsSpliterator(this, index, fence, origin, bound);
}
/**
* @hidden
*/
@Override
public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, double origin, double bound) {
return new RandomDoublesSpliterator(this, index, fence, origin, bound);
}
/**
* Returns a stream producing the given {@code streamSize} number of
* pseudorandom {@code int} values.
@ -656,7 +626,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public IntStream ints(long streamSize) {
return super.ints(streamSize);
return AbstractSpliteratorGenerator.ints(this, streamSize);
}
/**
@ -674,7 +644,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public IntStream ints() {
return super.ints();
return AbstractSpliteratorGenerator.ints(this);
}
/**
@ -711,7 +681,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound) {
return super.ints(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.ints(this, streamSize, randomNumberOrigin, randomNumberBound);
}
/**
@ -749,7 +719,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public IntStream ints(int randomNumberOrigin, int randomNumberBound) {
return super.ints(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.ints(this, randomNumberOrigin, randomNumberBound);
}
/**
@ -767,7 +737,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public LongStream longs(long streamSize) {
return super.longs(streamSize);
return AbstractSpliteratorGenerator.longs(this, streamSize);
}
/**
@ -785,7 +755,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public LongStream longs() {
return super.longs();
return AbstractSpliteratorGenerator.longs(this);
}
/**
@ -827,7 +797,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound) {
return super.longs(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.longs(this, streamSize, randomNumberOrigin, randomNumberBound);
}
/**
@ -870,7 +840,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public LongStream longs(long randomNumberOrigin, long randomNumberBound) {
return super.longs(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.longs(this, randomNumberOrigin, randomNumberBound);
}
/**
@ -889,7 +859,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public DoubleStream doubles(long streamSize) {
return super.doubles(streamSize);
return AbstractSpliteratorGenerator.doubles(this, streamSize);
}
/**
@ -908,7 +878,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public DoubleStream doubles() {
return super.doubles();
return AbstractSpliteratorGenerator.doubles(this);
}
/**
@ -940,7 +910,7 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) {
return super.doubles(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.doubles(this, streamSize, randomNumberOrigin, randomNumberBound);
}
/**
@ -972,6 +942,6 @@ public class Random extends AbstractSpliteratorGenerator
*/
@Override
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound) {
return super.doubles(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.doubles(this, randomNumberOrigin, randomNumberBound);
}
}

View file

@ -280,30 +280,6 @@ public final class SplittableRandom extends AbstractSplittableGenerator {
return new SplittableRandom(source.nextLong(), mixGamma(source.nextLong()));
}
/**
* @hidden
*/
@Override
public Spliterator.OfInt makeIntsSpliterator(long index, long fence, int origin, int bound) {
return super.makeIntsSpliterator(index, fence, origin, bound);
}
/**
* @hidden
*/
@Override
public Spliterator.OfLong makeLongsSpliterator(long index, long fence, long origin, long bound) {
return super.makeLongsSpliterator(index, fence, origin, bound);
}
/**
* @hidden
*/
@Override
public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, double origin, double bound) {
return super.makeDoublesSpliterator(index, fence, origin, bound);
}
@Override
public int nextInt() {
return mix32(nextSeed());

View file

@ -51,11 +51,7 @@ import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import jdk.internal.util.random.RandomSupport;
import jdk.internal.util.random.RandomSupport.AbstractSpliteratorGenerator;
import jdk.internal.util.random.RandomSupport.RandomIntsSpliterator;
import jdk.internal.util.random.RandomSupport.RandomLongsSpliterator;
import jdk.internal.util.random.RandomSupport.RandomDoublesSpliterator;
import jdk.internal.util.random.RandomSupport.RandomGeneratorProperties;
import jdk.internal.util.random.RandomSupport.*;
import jdk.internal.misc.Unsafe;
import jdk.internal.misc.VM;
@ -396,48 +392,6 @@ public class ThreadLocalRandom extends Random {
/** The common ThreadLocalRandom */
private static final ThreadLocalRandom instance = new ThreadLocalRandom();
private static final class ThreadLocalRandomProxy extends Random {
@java.io.Serial
static final long serialVersionUID = 0L;
static final AbstractSpliteratorGenerator proxy = new ThreadLocalRandomProxy();
public int nextInt() {
return ThreadLocalRandom.current().nextInt();
}
public long nextLong() {
return ThreadLocalRandom.current().nextLong();
}
}
// Methods required by class AbstractSpliteratorGenerator
/**
* @hidden
*/
@Override
public Spliterator.OfInt makeIntsSpliterator(long index, long fence, int origin, int bound) {
return new RandomIntsSpliterator(ThreadLocalRandomProxy.proxy, index, fence, origin, bound);
}
/**
* @hidden
*/
@Override
public Spliterator.OfLong makeLongsSpliterator(long index, long fence, long origin, long bound) {
return new RandomLongsSpliterator(ThreadLocalRandomProxy.proxy, index, fence, origin, bound);
}
/**
* @hidden
*/
@Override
public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, double origin, double bound) {
return new RandomDoublesSpliterator(ThreadLocalRandomProxy.proxy, index, fence, origin, bound);
}
/**
* The next seed for default constructors.
*/
@ -457,6 +411,19 @@ public class ThreadLocalRandom extends Random {
}
}
@SuppressWarnings("serial")
private static final class ThreadLocalRandomProxy extends Random {
static final Random PROXY = new ThreadLocalRandomProxy();
public int nextInt() {
return ThreadLocalRandom.current().nextInt();
}
public long nextLong() {
return ThreadLocalRandom.current().nextLong();
}
}
/**
* {@inheritDoc}
*/
@ -579,7 +546,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public IntStream ints(long streamSize) {
return super.ints(streamSize);
return AbstractSpliteratorGenerator.ints(ThreadLocalRandomProxy.PROXY, streamSize);
}
/**
@ -590,7 +557,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public IntStream ints() {
return super.ints();
return AbstractSpliteratorGenerator.ints(ThreadLocalRandomProxy.PROXY);
}
/**
@ -600,7 +567,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound) {
return super.ints(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.ints(ThreadLocalRandomProxy.PROXY, streamSize, randomNumberOrigin, randomNumberBound);
}
/**
@ -612,7 +579,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public IntStream ints(int randomNumberOrigin, int randomNumberBound) {
return super.ints(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.ints(ThreadLocalRandomProxy.PROXY, randomNumberOrigin, randomNumberBound);
}
/**
@ -622,7 +589,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public LongStream longs(long streamSize) {
return super.longs(streamSize);
return AbstractSpliteratorGenerator.longs(ThreadLocalRandomProxy.PROXY, streamSize);
}
/**
@ -633,7 +600,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public LongStream longs() {
return super.longs();
return AbstractSpliteratorGenerator.longs(ThreadLocalRandomProxy.PROXY);
}
/**
@ -643,7 +610,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound) {
return super.longs(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.longs(ThreadLocalRandomProxy.PROXY, streamSize, randomNumberOrigin, randomNumberBound);
}
/**
@ -655,7 +622,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public LongStream longs(long randomNumberOrigin, long randomNumberBound) {
return super.longs(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.longs(ThreadLocalRandomProxy.PROXY, randomNumberOrigin, randomNumberBound);
}
/**
@ -665,7 +632,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public DoubleStream doubles(long streamSize) {
return super.doubles(streamSize);
return AbstractSpliteratorGenerator.doubles(ThreadLocalRandomProxy.PROXY, streamSize);
}
/**
@ -676,7 +643,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public DoubleStream doubles() {
return super.doubles();
return AbstractSpliteratorGenerator.doubles(ThreadLocalRandomProxy.PROXY);
}
/**
@ -686,7 +653,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) {
return super.doubles(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.doubles(ThreadLocalRandomProxy.PROXY, streamSize, randomNumberOrigin, randomNumberBound);
}
/**
@ -698,7 +665,7 @@ public class ThreadLocalRandom extends Random {
*/
@Override
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound) {
return super.doubles(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.doubles(ThreadLocalRandomProxy.PROXY, randomNumberOrigin, randomNumberBound);
}
}

View file

@ -28,6 +28,7 @@ package jdk.internal.util.random;
import java.lang.annotation.*;
import java.math.BigInteger;
import java.util.Objects;
import java.util.Random;
import java.util.function.Consumer;
import java.util.function.DoubleConsumer;
import java.util.function.IntConsumer;
@ -50,8 +51,6 @@ import java.util.stream.StreamSupport;
* internal package it is not intended for general use.
*
* @since 17
* @hidden
*
*/
public class RandomSupport {
/**
@ -952,7 +951,7 @@ public class RandomSupport {
*/
public static class RandomIntsSpliterator extends RandomSupport.RandomSpliterator
implements Spliterator.OfInt {
final AbstractSpliteratorGenerator generatingGenerator;
final RandomGenerator generatingGenerator;
final int origin;
final int bound;
@ -965,7 +964,7 @@ public class RandomSupport {
* @param origin the (inclusive) lower bound on the pseudorandom values to be generated
* @param bound the (exclusive) upper bound on the pseudorandom values to be generated
*/
public RandomIntsSpliterator(AbstractSpliteratorGenerator generatingGenerator,
public RandomIntsSpliterator(RandomGenerator generatingGenerator,
long index, long fence, int origin, int bound) {
super(index, fence);
this.generatingGenerator = generatingGenerator;
@ -1010,7 +1009,7 @@ public class RandomSupport {
*/
public static class RandomLongsSpliterator extends RandomSupport.RandomSpliterator
implements Spliterator.OfLong {
final AbstractSpliteratorGenerator generatingGenerator;
final RandomGenerator generatingGenerator;
final long origin;
final long bound;
@ -1023,7 +1022,7 @@ public class RandomSupport {
* @param origin the (inclusive) lower bound on the pseudorandom values to be generated
* @param bound the (exclusive) upper bound on the pseudorandom values to be generated
*/
public RandomLongsSpliterator(AbstractSpliteratorGenerator generatingGenerator,
public RandomLongsSpliterator(RandomGenerator generatingGenerator,
long index, long fence, long origin, long bound) {
super(index, fence);
this.generatingGenerator = generatingGenerator;
@ -1068,7 +1067,7 @@ public class RandomSupport {
*/
public static class RandomDoublesSpliterator extends RandomSupport.RandomSpliterator
implements Spliterator.OfDouble {
final AbstractSpliteratorGenerator generatingGenerator;
final RandomGenerator generatingGenerator;
final double origin;
final double bound;
@ -1081,7 +1080,7 @@ public class RandomSupport {
* @param origin the (inclusive) lower bound on the pseudorandom values to be generated
* @param bound the (exclusive) upper bound on the pseudorandom values to be generated
*/
public RandomDoublesSpliterator(AbstractSpliteratorGenerator generatingGenerator,
public RandomDoublesSpliterator(RandomGenerator generatingGenerator,
long index, long fence, double origin, double bound) {
super(index, fence);
this.generatingGenerator = generatingGenerator;
@ -1405,17 +1404,12 @@ public class RandomSupport {
* only to extend this class and provide implementations for the methods
* {@link RandomGenerator#nextInt() nextInt}(),
* {@link RandomGenerator#nextLong() nextLong}(),
* {@link AbstractSpliteratorGenerator#makeIntsSpliterator(long, long, int, int) makeIntsSpliterator}(index, fence, origin, bound),
* {@link AbstractSpliteratorGenerator#makeLongsSpliterator(long, long, long, long) makeLongsSpliterator}(index, fence, origin, bound),
* and
* {@link AbstractSpliteratorGenerator#makeDoublesSpliterator(long, long, double, double) makeDoublesSpliterator}(index, fence, origin, bound).
*
* <p> This class is not public; it provides shared code to the public
* classes {@link AbstractSplittableGenerator}, and
* {@link AbstractArbitrarilyJumpableGenerator}.
*
* @since 17
* @hidden
*/
public abstract static class AbstractSpliteratorGenerator implements RandomGenerator {
/*
@ -1425,75 +1419,12 @@ public class RandomSupport {
* satisfy the interface RandomGenerator. An implementation of this
* interface need only extend this class and provide implementations
* of six methods: nextInt, nextLong, and nextDouble (the versions
* that take no arguments) and makeIntsSpliterator,
* makeLongsSpliterator, and makeDoublesSpliterator.
* that take no arguments).
*
* File organization: First the non-public abstract methods needed
* to create spliterators, then the main public methods.
*/
/**
* Explicit constructor.
*/
protected AbstractSpliteratorGenerator() {
}
/**
* Create an instance of {@link Spliterator.OfInt} that for each
* traversal position between the specified index (inclusive) and the
* specified fence (exclusive) generates a pseudorandomly chosen
* {@code int} value between the specified origin (inclusive) and the
* specified bound (exclusive).
*
* @param index the (inclusive) lower bound on traversal positions
* @param fence the (exclusive) upper bound on traversal positions
* @param origin the (inclusive) lower bound on the pseudorandom values to be generated
* @param bound the (exclusive) upper bound on the pseudorandom values to be generated
*
* @return an instance of {@link Spliterator.OfInt}
*
* @hidden
*/
public abstract Spliterator.OfInt makeIntsSpliterator(long index, long fence, int origin, int bound);
/**
* Create an instance of {@link Spliterator.OfLong} that for each
* traversal position between the specified index (inclusive) and the
* specified fence (exclusive) generates a pseudorandomly chosen
* {@code long} value between the specified origin (inclusive) and the
* specified bound (exclusive).
*
* @param index the (inclusive) lower bound on traversal positions
* @param fence the (exclusive) upper bound on traversal positions
* @param origin the (inclusive) lower bound on the pseudorandom values to be generated
* @param bound the (exclusive) upper bound on the pseudorandom values to be generated
*
* @return an instance of {@link Spliterator.OfLong}
*
* @hidden
*/
public abstract Spliterator.OfLong makeLongsSpliterator(long index, long fence, long origin, long bound);
/**
* Create an instance of {@link Spliterator.OfDouble} that for each
* traversal position between the specified index (inclusive) and the
* specified fence (exclusive) generates a pseudorandomly chosen
* {@code double} value between the specified origin (inclusive) and the
* specified bound (exclusive).
*
* @param index the (inclusive) lower bound on traversal positions
* @param fence the (exclusive) upper bound on traversal positions
* @param origin the (inclusive) lower bound on the pseudorandom values to be generated
* @param bound the (exclusive) upper bound on the pseudorandom values to be generated
*
* @return an instance of {@link Spliterator.OfDouble}
*
* @hidden
*/
public abstract Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, double origin, double bound);
/* ---------------- public methods ---------------- */
// stream methods, coded in a way intended to better isolate for
// maintenance purposes the small differences across forms.
@ -1509,79 +1440,116 @@ public class RandomSupport {
return StreamSupport.doubleStream(srng, false);
}
@Override
/* ---------------- public static methods ---------------- */
public static IntStream ints(RandomGenerator gen, long streamSize) {
RandomSupport.checkStreamSize(streamSize);
return intStream(new RandomIntsSpliterator(gen, 0L, streamSize, Integer.MAX_VALUE, 0));
}
public static IntStream ints(RandomGenerator gen) {
return intStream(new RandomIntsSpliterator(gen, 0L, Long.MAX_VALUE, Integer.MAX_VALUE, 0));
}
public static IntStream ints(RandomGenerator gen, long streamSize, int randomNumberOrigin, int randomNumberBound) {
RandomSupport.checkStreamSize(streamSize);
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return intStream(new RandomIntsSpliterator(gen, 0L, streamSize, randomNumberOrigin, randomNumberBound));
}
public static IntStream ints(RandomGenerator gen, int randomNumberOrigin, int randomNumberBound) {
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return intStream(new RandomIntsSpliterator(gen, 0L, Long.MAX_VALUE, randomNumberOrigin, randomNumberBound));
}
public static LongStream longs(RandomGenerator gen, long streamSize) {
RandomSupport.checkStreamSize(streamSize);
return longStream(new RandomLongsSpliterator(gen, 0L, streamSize, Long.MAX_VALUE, 0L));
}
public static LongStream longs(RandomGenerator gen) {
return longStream(new RandomLongsSpliterator(gen, 0L, Long.MAX_VALUE, Long.MAX_VALUE, 0L));
}
public static LongStream longs(RandomGenerator gen, long streamSize, long randomNumberOrigin, long randomNumberBound) {
RandomSupport.checkStreamSize(streamSize);
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return longStream(new RandomLongsSpliterator(gen, 0L, streamSize, randomNumberOrigin, randomNumberBound));
}
public static LongStream longs(RandomGenerator gen, long randomNumberOrigin, long randomNumberBound) {
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return longStream(new RandomLongsSpliterator(gen, 0L, Long.MAX_VALUE, randomNumberOrigin, randomNumberBound));
}
public static DoubleStream doubles(RandomGenerator gen, long streamSize) {
RandomSupport.checkStreamSize(streamSize);
return doubleStream(new RandomDoublesSpliterator(gen, 0L, streamSize, Double.MAX_VALUE, 0.0));
}
public static DoubleStream doubles(RandomGenerator gen) {
return doubleStream(new RandomDoublesSpliterator(gen, 0L, Long.MAX_VALUE, Double.MAX_VALUE, 0.0));
}
public static DoubleStream doubles(RandomGenerator gen, long streamSize, double randomNumberOrigin, double randomNumberBound) {
RandomSupport.checkStreamSize(streamSize);
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return doubleStream(new RandomDoublesSpliterator(gen, 0L, streamSize, randomNumberOrigin, randomNumberBound));
}
public static DoubleStream doubles(RandomGenerator gen, double randomNumberOrigin, double randomNumberBound) {
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return doubleStream(new RandomDoublesSpliterator(gen, 0L, Long.MAX_VALUE, randomNumberOrigin, randomNumberBound));
}
/* ---------------- public instance methods ---------------- */
public IntStream ints(long streamSize) {
RandomSupport.checkStreamSize(streamSize);
return intStream(makeIntsSpliterator(0L, streamSize, Integer.MAX_VALUE, 0));
return ints(this, streamSize);
}
@Override
public IntStream ints() {
return intStream(makeIntsSpliterator(0L, Long.MAX_VALUE, Integer.MAX_VALUE, 0));
return ints(this);
}
@Override
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound) {
RandomSupport.checkStreamSize(streamSize);
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return intStream(makeIntsSpliterator(0L, streamSize, randomNumberOrigin, randomNumberBound));
return ints(this, streamSize, randomNumberOrigin, randomNumberBound);
}
@Override
public IntStream ints(int randomNumberOrigin, int randomNumberBound) {
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return intStream(makeIntsSpliterator(0L, Long.MAX_VALUE, randomNumberOrigin, randomNumberBound));
return ints(this, randomNumberOrigin, randomNumberBound);
}
@Override
public LongStream longs(long streamSize) {
RandomSupport.checkStreamSize(streamSize);
return longStream(makeLongsSpliterator(0L, streamSize, Long.MAX_VALUE, 0L));
return longs(this, streamSize);
}
@Override
public LongStream longs() {
return longStream(makeLongsSpliterator(0L, Long.MAX_VALUE, Long.MAX_VALUE, 0L));
return longs(this);
}
@Override
public LongStream longs(long streamSize, long randomNumberOrigin,
long randomNumberBound) {
RandomSupport.checkStreamSize(streamSize);
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return longStream(makeLongsSpliterator(0L, streamSize, randomNumberOrigin, randomNumberBound));
public LongStream longs(long streamSize, long randomNumberOrigin,long randomNumberBound) {
return longs(this, streamSize, randomNumberOrigin, randomNumberBound);
}
@Override
public LongStream longs(long randomNumberOrigin, long randomNumberBound) {
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return StreamSupport.longStream
(makeLongsSpliterator(0L, Long.MAX_VALUE, randomNumberOrigin, randomNumberBound),
false);
return longs(this, randomNumberOrigin, randomNumberBound);
}
@Override
public DoubleStream doubles(long streamSize) {
RandomSupport.checkStreamSize(streamSize);
return doubleStream(makeDoublesSpliterator(0L, streamSize, Double.MAX_VALUE, 0.0));
return doubles(this, streamSize);
}
@Override
public DoubleStream doubles() {
return doubleStream(makeDoublesSpliterator(0L, Long.MAX_VALUE, Double.MAX_VALUE, 0.0));
return doubles(this);
}
@Override
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) {
RandomSupport.checkStreamSize(streamSize);
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return doubleStream(makeDoublesSpliterator(0L, streamSize, randomNumberOrigin, randomNumberBound));
return doubles(this, streamSize, randomNumberOrigin, randomNumberBound);
}
@Override
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound) {
RandomSupport.checkRange(randomNumberOrigin, randomNumberBound);
return doubleStream(makeDoublesSpliterator(0L, Long.MAX_VALUE, randomNumberOrigin, randomNumberBound));
return doubles(this, randomNumberOrigin, randomNumberBound);
}
}
@ -1636,7 +1604,6 @@ public class RandomSupport {
* admits a more efficient implementation.
*
* @since 17
* @hidden
*/
public abstract static class AbstractArbitrarilyJumpableGenerator
extends AbstractSpliteratorGenerator implements RandomGenerator.ArbitrarilyJumpableGenerator {
@ -1661,20 +1628,6 @@ public class RandomSupport {
protected AbstractArbitrarilyJumpableGenerator() {
}
// Methods required by class AbstractSpliteratorGenerator
public Spliterator.OfInt makeIntsSpliterator(long index, long fence, int origin, int bound) {
return new RandomIntsSpliterator(this, index, fence, origin, bound);
}
public Spliterator.OfLong makeLongsSpliterator(long index, long fence, long origin, long bound) {
return new RandomLongsSpliterator(this, index, fence, origin, bound);
}
public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, double origin, double bound) {
return new RandomDoublesSpliterator(this, index, fence, origin, bound);
}
// Similar methods used by this class
Spliterator<RandomGenerator> makeJumpsSpliterator(long index, long fence, double distance) {
@ -2078,7 +2031,6 @@ public class RandomSupport {
* admits a more efficient implementation.
*
* @since 17
* @hidden
*/
public abstract static class AbstractSplittableGenerator extends AbstractSpliteratorGenerator implements SplittableGenerator {
@ -2103,18 +2055,6 @@ public class RandomSupport {
protected AbstractSplittableGenerator() {
}
public Spliterator.OfInt makeIntsSpliterator(long index, long fence, int origin, int bound) {
return new RandomIntsSpliterator(this, index, fence, origin, bound);
}
public Spliterator.OfLong makeLongsSpliterator(long index, long fence, long origin, long bound) {
return new RandomLongsSpliterator(this, index, fence, origin, bound);
}
public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, double origin, double bound) {
return new RandomDoublesSpliterator(this, index, fence, origin, bound);
}
Spliterator<SplittableGenerator> makeSplitsSpliterator(long index, long fence, SplittableGenerator source) {
return new RandomSplitsSpliterator(source, index, fence, this);
}
@ -2382,7 +2322,6 @@ public class RandomSupport {
* admits a more efficient implementation.
*
* @since 17
* @hidden
*/
public abstract static class AbstractSplittableWithBrineGenerator
extends AbstractSplittableGenerator {