Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
e286c4a2e3cbd9a85f2a1eb19cdfe783b82f8a3a
[simgrid.git] / src / bindings / java / org / simgrid / msg / RngStream.java
1 /* JNI interface to C RngStream code */
2
3 /* Copyright (c) 2006-2014. The SimGrid Team.
4  * All rights reserved.                                                     */
5
6 /* This program is free software; you can redistribute it and/or modify it
7  * under the terms of the license (GNU LGPL) which comes with this package. */
8
9 package org.simgrid.msg;
10 /**
11  * Export of RngStreams for Java
12  */
13 public class RngStream {
14         /**
15          * Represents the bind between the RngStream java object and the C object.
16          */
17         private long bind;
18         /**
19          * Creates and returns a new stream without identifier. 
20          * This procedure reserves space to keep the information relative to
21          * the RngStream, initializes its seed Ig , sets Bg and Cg equal to Ig , sets its antithetic and
22          * precision switches to 0. The seed Ig is equal to the initial seed of the package given by
23          * setPackageSeed if this is the first stream created, otherwise it is Z steps ahead
24          * of that of the most recently created stream.
25          */
26         public RngStream() {
27                 create("");
28         }
29         /**
30          * Creates and returns a new stream with identifier "name". 
31          * This procedure reserves space to keep the information relative to
32          * the RngStream, initializes its seed Ig , sets Bg and Cg equal to Ig , sets its antithetic and
33          * precision switches to 0. The seed Ig is equal to the initial seed of the package given by
34          * setPackageSeed if this is the first stream created, otherwise it is Z steps ahead
35          * of that of the most recently created stream.
36          */
37         public RngStream(String name) {
38                 create(name);
39         }
40         /**
41          * The natively implemented method to create a C RngStream object.
42          */
43         private native void create(String name);
44
45         protected void finalize() throws Throwable{
46                 nativeFinalize();
47         }
48         /**
49          * Release the C RngStream object
50          */
51         private native void nativeFinalize();
52
53         /**
54          * Sets the initial seed of the package RngStreams to the six integers in the vector seed. This will
55          * be the seed (initial state) of the first stream. If this procedure is not called, the default initial
56          * seed is (12345, 12345, 12345, 12345, 12345, 12345). If it is called, the first 3 values of the seed
57          * must all be less than m1 = 4294967087, and not all 0; and the last 3 values must all be less
58          * than m2 = 4294944443, and not all 0. Returns false for invalid seeds, and true otherwise.
59          */
60         public static native boolean setPackageSeed(int[] seed);
61         /**
62          * Reinitializes the stream g to its initial state: Cg and Bg are set to Ig .
63          */
64         public native void resetStart();
65         /**
66          * Reinitializes the stream g to the beginning of its current substream: Cg is set to Bg .
67          */
68         public native void restartStartSubstream();
69         /**
70          * Reinitializes the stream g to the beginning of its next substream: Ng is computed, and Cg and
71          * Bg are set to Ng .
72          */
73         public native void resetNextSubstream();
74         /**
75          * If a = true the stream g will start generating antithetic variates, i.e., 1 - U instead of U , until
76          *  this method is called again with a = false.
77          */
78         public native void setAntithetic(boolean a);
79         /**
80          * Sets the initial seed Ig of stream g to the vector seed. This vector must satisfy the same
81          * conditions as in setPackageSeed. The stream is then reset to this initial seed. The
82          * states and seeds of the other streams are not modified. As a result, after calling this procedure,
83          * the initial seeds of the streams are no longer spaced Z values apart. We discourage the use of
84          * this procedure. Returns false for invalid seeds, and true otherwise.
85          */
86         public native boolean setSeed(int[] seed);
87         /**
88          * Advances the state of the stream by k values, without modifying the states of other streams (as
89          * in RngStream_SetSeed), nor the values of Bg and Ig associated with this stream. If e > 0, then
90          * k = 2e + c; if e < 0, then k = -2-e + c; and if e = 0, then k = c. Note: c is allowed to take
91          * negative values. We discourage the use of this procedure.     
92          */
93         public native void advanceState(int e, int g);
94
95         /**
96          * Returns a (pseudo)random number from the uniform distribution over the interval (0, 1), after advancing the state by one step. The returned number has 32 bits of precision
97          * in the sense that it is always a multiple of 1/(232 - 208), unless RngStream_IncreasedPrecis
98          * has been called for this stream.
99          */
100         public native double randU01();
101         /**
102          * Returns a (pseudo)random number from the discrete uniform distribution over the integers
103          * {i, i + 1, . . . , j}
104          */
105         public native int randInt(int i, int j);
106
107         /**
108          * Class initializer, to initialize various JNI stuff
109          */
110         public static native void nativeInit();
111         static {
112                 org.simgrid.NativeLib.nativeInit();
113                 nativeInit();
114         }
115 }