public abstract class BaseProvider extends Object implements RestorableUniformRandomProvider
Constructor and Description |
---|
BaseProvider() |
Modifier and Type | Method and Description |
---|---|
protected void |
checkIndex(int min,
int max,
int index)
Checks whether
index is in the range [min, max] . |
protected void |
checkStateSize(byte[] state,
int expected)
Deprecated.
Method is used internally and should be made private in
some future release.
|
protected byte[] |
composeStateInternal(byte[] state,
byte[] parentState)
Combine parent and subclass states.
|
protected static int[] |
extendSeed(int[] seed,
int length)
Extend the seed to the specified minimum length.
|
protected static long[] |
extendSeed(long[] seed,
int length)
Extend the seed to the specified minimum length.
|
protected void |
fillState(int[] state,
int[] seed)
Simple filling procedure.
|
protected void |
fillState(long[] state,
long[] seed)
Simple filling procedure.
|
protected byte[] |
getStateInternal()
Creates a snapshot of the RNG state.
|
void |
restoreState(RandomProviderState state) |
RandomProviderState |
saveState() |
protected void |
setStateInternal(byte[] state)
Resets the RNG to the given
state . |
protected byte[][] |
splitStateInternal(byte[] state,
int localStateLength)
Splits the given
state into a part to be consumed by the caller
in order to restore its local state, while the reminder is passed to
the parent class. |
String |
toString() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
doubles, doubles, doubles, doubles, ints, ints, ints, ints, longs, longs, longs, longs, nextBoolean, nextBytes, nextBytes, nextDouble, nextDouble, nextDouble, nextFloat, nextFloat, nextFloat, nextInt, nextInt, nextInt, nextLong, nextLong, nextLong
public BaseProvider()
public RandomProviderState saveState()
saveState
in interface RestorableUniformRandomProvider
public void restoreState(RandomProviderState state)
restoreState
in interface RestorableUniformRandomProvider
protected byte[] composeStateInternal(byte[] state, byte[] parentState)
getStateInternal()
,
will end with a statement like the following:
return composeStateInternal(state,
super.getStateInternal());
where state
is the state needed and defined by the class
where the method is overridden.state
- State of the calling class.parentState
- State of the calling class' parent.protected byte[][] splitStateInternal(byte[] state, int localStateLength)
state
into a part to be consumed by the caller
in order to restore its local state, while the reminder is passed to
the parent class.
I.e. the body of the overridden setStateInternal(byte[])
,
will contain statements like the following:
final byte[][] s = splitState(state, localStateLength);
// Use "s[0]" to recover the local state.
super.setStateInternal(s[1]);
where state
is the combined state of the calling class and of
all its parents.state
- State.
The local state must be stored at the beginning of the array.localStateLength
- Number of elements that will be consumed by the
locally defined state.IllegalStateException
- if state.length < localStateLength
.protected byte[] getStateInternal()
protected void setStateInternal(byte[] state)
state
.state
- State (previously obtained by a call to
getStateInternal()
).IllegalStateException
- if the size of the given array is
not consistent with the state defined by this class.checkStateSize(byte[],int)
protected void fillState(int[] state, int[] seed)
state
by copying
min(seed.length, state.length)
elements from
seed
,
state
with non-zero
values (even if seed.length < state.length
).
state
- State. Must be allocated.seed
- Seed. Cannot be null.protected void fillState(long[] state, long[] seed)
state
by copying
min(seed.length, state.length)
elements from
seed
,
state
with non-zero
values (even if seed.length < state.length
).
state
- State. Must be allocated.seed
- Seed. Cannot be null.@Deprecated protected void checkStateSize(byte[] state, int expected)
state
has the expected
size.state
- State.expected
- Expected length of state
array.IllegalStateException
- if state.length < expected
.protected void checkIndex(int min, int max, int index)
index
is in the range [min, max]
.min
- Lower bound.max
- Upper bound.index
- Value that must lie within the [min, max]
interval.IndexOutOfBoundsException
- if index
is not within the
[min, max]
interval.protected static long[] extendSeed(long[] seed, int length)
This method can be used in constructors that must pass their seed to the super class to avoid a duplication of seed expansion to the minimum length required by the super class and the class:
public RNG extends AnotherRNG { public RNG(long[] seed) { super(seed = extendSeed(seed, SEED_SIZE)); // Use seed for additional state ... } }
Note using the state filling procedure provided in fillState(long[], long[])
is not possible as it is an instance method. Calling a seed extension routine must use a
static method.
This method functions as if the seed has been extended using a
SplitMix64
generator seeded with seed[0]
, or zero if the input seed length is zero.
if (seed.length < length) { final long[] s = Arrays.copyOf(seed, length); final SplitMix64 rng = new SplitMix64(s[0]); for (int i = seed.length; i < length; i++) { s[i] = rng.nextLong(); } return s; }
seed
- Input seedlength
- The minimum lengthprotected static int[] extendSeed(int[] seed, int length)
This method can be used in constructors that must pass their seed to the super class to avoid a duplication of seed expansion to the minimum length required by the super class and the class:
public RNG extends AnotherRNG { public RNG(int[] seed) { super(seed = extendSeed(seed, SEED_SIZE)); // Use seed for additional state ... } }
Note using the state filling procedure provided in fillState(int[], int[])
is not possible as it is an instance method. Calling a seed extension routine must use a
static method.
This method functions as if the seed has been extended using a
SplitMix64
-style 32-bit
generator seeded with seed[0]
, or zero if the input seed length is zero. The
generator uses the 32-bit mixing function from MurmurHash3.
seed
- Input seedlength
- The minimum lengthCopyright © 2016–2022 The Apache Software Foundation. All rights reserved.