ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/SplittableRandom.java
(Generate patch)

Comparing jsr166/src/main/java/util/SplittableRandom.java (file contents):
Revision 1.33 by dl, Sat Nov 12 00:12:05 2016 UTC vs.
Revision 1.40 by jsr166, Tue Oct 3 22:27:04 2017 UTC

# Line 375 | Line 375 | public final class SplittableRandom {
375       * may, and typically does, vary across program invocations.
376       */
377      public SplittableRandom() { // emulate defaultGen.split()
378 <        long s = defaultGen.getAndAdd(2 * GOLDEN_GAMMA);
378 >        long s = defaultGen.getAndAdd(GOLDEN_GAMMA << 1);
379          this.seed = mix64(s);
380          this.gamma = mixGamma(s + GOLDEN_GAMMA);
381      }
# Line 399 | Line 399 | public final class SplittableRandom {
399      }
400  
401      /**
402 +     * Fills a user-supplied byte array with generated pseudorandom bytes.
403 +     *
404 +     * @param  bytes the byte array to fill with pseudorandom bytes
405 +     * @throws NullPointerException if bytes is null
406 +     * @since  10
407 +     */
408 +    public void nextBytes(byte[] bytes) {
409 +        int i = 0;
410 +        int len = bytes.length;
411 +        for (int words = len >> 3; words--> 0; ) {
412 +            long rnd = nextLong();
413 +            for (int n = 8; n--> 0; rnd >>>= Byte.SIZE)
414 +                bytes[i++] = (byte)rnd;
415 +        }
416 +        if (i < len)
417 +            for (long rnd = nextLong(); i < len; rnd >>>= Byte.SIZE)
418 +                bytes[i++] = (byte)rnd;
419 +    }
420 +
421 +    /**
422       * Returns a pseudorandom {@code int} value.
423       *
424       * @return a pseudorandom {@code int} value
# Line 530 | Line 550 | public final class SplittableRandom {
550              Double.longBitsToDouble(Double.doubleToLongBits(bound) - 1);
551      }
552  
533        /**
534     * Generates a pseudorandom number with the indicated number of
535     * bits. Unlike in superclass @{link Random}, this method is never
536     * internally called or used by any other publicly accessible
537     * method.
538     *
539     * @param  bits random bits
540     * @return the next pseudorandom value from this random number
541     *         generator's sequence
542     */
543    protected int next(int bits) {
544        return (int)(nextLong() >>> (64 - bits));
545    }
546
553      /**
554       * Returns a pseudorandom {@code double} value between the specified
555       * origin (inclusive) and bound (exclusive).
# Line 793 | Line 799 | public final class SplittableRandom {
799       * @return a stream of pseudorandom {@code double} values,
800       *         each with the given origin (inclusive) and bound (exclusive)
801       * @throws IllegalArgumentException if {@code streamSize} is
802 <     *         less than zero
797 <     * @throws IllegalArgumentException if {@code randomNumberOrigin}
802 >     *         less than zero, or {@code randomNumberOrigin}
803       *         is greater than or equal to {@code randomNumberBound}
804       */
805      public DoubleStream doubles(long streamSize, double randomNumberOrigin,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines