Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[doc] Add todo about user .then()
[simgrid.git] / src / bindings / java / jmsg_rngstream.cpp
1 /* Functions related to the RngStream Java port                         */
2
3 /* Copyright (c) 2007-2015. 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 #include "jmsg_rngstream.h"
10 #include "jxbt_utilities.h"
11
12 jfieldID jrngstream_bind;
13
14 RngStream jrngstream_to_native(JNIEnv *env, jobject jrngstream) {
15   RngStream rngstream = (RngStream)(intptr_t)env->GetLongField(jrngstream, jrngstream_bind);
16   if (!rngstream) {
17     jxbt_throw_notbound(env, "rngstream", jrngstream);
18     return nullptr;
19   }
20   return rngstream;
21 }
22
23 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_nativeInit(JNIEnv *env, jclass cls) {
24   jclass class_RngStream = env->FindClass("org/simgrid/msg/RngStream");
25
26   jrngstream_bind = jxbt_get_jfield(env, class_RngStream, "bind", "J");
27 }
28
29 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_create(JNIEnv *env, jobject jrngstream, jstring jname) {
30   const char *name = env->GetStringUTFChars(jname, 0);
31   RngStream rngstream = RngStream_CreateStream(name);
32   //Bind the RngStream object
33   env->SetLongField(jrngstream, jrngstream_bind, (intptr_t)rngstream);
34
35   env->ReleaseStringUTFChars(jname, name);
36 }
37
38 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_nativeFinalize(JNIEnv *env, jobject jrngstream) {
39   RngStream rngstream = jrngstream_to_native(env, jrngstream);
40   RngStream_DeleteStream(&rngstream);
41   env->SetLongField(jrngstream, jrngstream_bind, (intptr_t)nullptr);
42 }
43
44 JNIEXPORT jboolean JNICALL
45 Java_org_simgrid_msg_RngStream_setPackageSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
46   jint buffer[6];
47
48   env->GetIntArrayRegion(jseed, 0, 6, buffer);
49
50   RngStream rngstream = jrngstream_to_native(env, jrngstream);
51   if (!rngstream)
52     return JNI_FALSE;
53
54   int result = RngStream_SetPackageSeed((unsigned long*)buffer);
55
56   return result == -1 ? JNI_FALSE : JNI_TRUE;
57 }
58
59 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStart(JNIEnv *env, jobject jrngstream) {
60   RngStream rngstream = jrngstream_to_native(env, jrngstream);
61   if (!rngstream)
62     return;
63
64   RngStream_ResetStartStream(rngstream);
65 }
66
67 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStartSubstream(JNIEnv *env, jobject jrngstream) {
68   RngStream rngstream = jrngstream_to_native(env, jrngstream);
69   if (!rngstream)
70     return;
71
72   RngStream_ResetStartSubstream(rngstream);
73 }
74
75 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetNextSubstream(JNIEnv *env, jobject jrngstream) {
76   RngStream rngstream = jrngstream_to_native(env, jrngstream);
77   if (!rngstream)
78     return;
79
80   RngStream_ResetNextSubstream(rngstream);
81 }
82
83 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_setAntithetic(JNIEnv *env, jobject jrngstream, jboolean ja) {
84   RngStream rngstream = jrngstream_to_native(env, jrngstream);
85   if (!rngstream)
86     return;
87
88   if (ja == JNI_TRUE) {
89     RngStream_SetAntithetic(rngstream,-1);
90   }
91   else {
92     RngStream_SetAntithetic(rngstream,0);
93   }
94 }
95
96 JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
97   jint buffer[6];
98
99   env->GetIntArrayRegion(jseed, 0, 6, buffer);
100
101   RngStream rngstream = jrngstream_to_native(env, jrngstream);
102   if (!rngstream)
103     return JNI_FALSE;
104
105   int result = RngStream_SetSeed(rngstream, (unsigned long*)buffer);
106
107   return result == -1 ? JNI_FALSE : JNI_TRUE;
108 }
109
110 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_advanceState(JNIEnv *env, jobject jrngstream, jint e, jint g) {
111   RngStream rngstream = jrngstream_to_native(env, jrngstream);
112   if (!rngstream)
113     return;
114
115   RngStream_AdvanceState(rngstream, (long)e, (long)g);
116 }
117
118 JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_RngStream_randU01(JNIEnv *env, jobject jrngstream) {
119   RngStream rngstream = jrngstream_to_native(env, jrngstream);
120   if (!rngstream)
121     return 0;
122
123   return (jdouble)RngStream_RandU01(rngstream);
124 }
125
126 JNIEXPORT jint JNICALL Java_org_simgrid_msg_RngStream_randInt(JNIEnv *env, jobject jrngstream, jint i, jint j) {
127   RngStream rngstream = jrngstream_to_native(env, jrngstream);
128   if (!rngstream)
129     return 0;
130
131   return (jint)RngStream_RandInt(rngstream, (int)i, (int)j);
132 }