Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
please sonar by removing useless asignments and return statements
[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 <xbt/sysdep.h>
10
11 #include "jmsg_rngstream.h"
12 #include "jxbt_utilities.h"
13
14 jfieldID jrngstream_bind;
15
16 RngStream jrngstream_to_native(JNIEnv *env, jobject jrngstream) {
17   RngStream rngstream = (RngStream)(intptr_t)env->GetLongField(jrngstream, jrngstream_bind);
18   if (!rngstream) {
19     jxbt_throw_notbound(env, "rngstream", jrngstream);
20     return nullptr;
21   }
22   return rngstream;
23 }
24
25 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_nativeInit(JNIEnv *env, jclass cls) {
26   jclass class_RngStream = env->FindClass("org/simgrid/msg/RngStream");
27
28   jrngstream_bind = jxbt_get_jfield(env, class_RngStream, "bind", "J");
29 }
30
31 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_create(JNIEnv *env, jobject jrngstream, jstring jname) {
32   const char *name = env->GetStringUTFChars(jname, 0);
33   RngStream rngstream = RngStream_CreateStream(name);
34   //Bind the RngStream object
35   env->SetLongField(jrngstream, jrngstream_bind, (intptr_t)rngstream);
36
37   env->ReleaseStringUTFChars(jname, name);
38 }
39
40 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_nativeFinalize(JNIEnv *env, jobject jrngstream) {
41   RngStream rngstream = jrngstream_to_native(env, jrngstream);
42   RngStream_DeleteStream(&rngstream);
43   env->SetLongField(jrngstream, jrngstream_bind, (intptr_t)nullptr);
44 }
45
46 JNIEXPORT jboolean JNICALL
47 Java_org_simgrid_msg_RngStream_setPackageSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
48
49   if (jseed == nullptr) {
50     jxbt_throw_null(env, xbt_strdup("seed argument is null"));
51     return JNI_FALSE;
52   }
53
54   jint buffer[6];
55   env->GetIntArrayRegion(jseed, 0, 6, buffer);
56
57   // The C API expects unsigned long which are wider than int on LP64.
58   // We need to convert:
59   unsigned long seed[6];
60   for (int i = 0; i != 6; ++i)
61     seed[i] = buffer[i];
62
63   int result = RngStream_SetPackageSeed(seed);
64   return result == -1 ? JNI_FALSE : JNI_TRUE;
65 }
66
67 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStart(JNIEnv *env, jobject jrngstream) {
68   RngStream rngstream = jrngstream_to_native(env, jrngstream);
69   if (!rngstream)
70     return;
71
72   RngStream_ResetStartStream(rngstream);
73 }
74
75 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStartSubstream(JNIEnv *env, jobject jrngstream) {
76   RngStream rngstream = jrngstream_to_native(env, jrngstream);
77   if (!rngstream)
78     return;
79
80   RngStream_ResetStartSubstream(rngstream);
81 }
82
83 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetNextSubstream(JNIEnv *env, jobject jrngstream) {
84   RngStream rngstream = jrngstream_to_native(env, jrngstream);
85   if (!rngstream)
86     return;
87
88   RngStream_ResetNextSubstream(rngstream);
89 }
90
91 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_setAntithetic(JNIEnv *env, jobject jrngstream, jboolean ja) {
92   RngStream rngstream = jrngstream_to_native(env, jrngstream);
93   if (!rngstream)
94     return;
95
96   if (ja == JNI_TRUE) {
97     RngStream_SetAntithetic(rngstream,-1);
98   }
99   else {
100     RngStream_SetAntithetic(rngstream,0);
101   }
102 }
103
104 JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
105   jint buffer[6];
106
107   env->GetIntArrayRegion(jseed, 0, 6, buffer);
108
109   RngStream rngstream = jrngstream_to_native(env, jrngstream);
110   if (!rngstream)
111     return JNI_FALSE;
112
113   // The C API expects unsigned long which are wider than int on LP64.
114   // We need to convert:
115   unsigned long seed[6];
116   for (int i = 0; i != 6; ++i)
117     seed[i] = buffer[i];
118
119   int result = RngStream_SetSeed(rngstream, seed);
120
121   return result == -1 ? JNI_FALSE : JNI_TRUE;
122 }
123
124 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_advanceState(JNIEnv *env, jobject jrngstream, jint e, jint g) {
125   RngStream rngstream = jrngstream_to_native(env, jrngstream);
126   if (!rngstream)
127     return;
128
129   RngStream_AdvanceState(rngstream, (long)e, (long)g);
130 }
131
132 JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_RngStream_randU01(JNIEnv *env, jobject jrngstream) {
133   RngStream rngstream = jrngstream_to_native(env, jrngstream);
134   if (!rngstream)
135     return 0;
136
137   return (jdouble)RngStream_RandU01(rngstream);
138 }
139
140 JNIEXPORT jint JNICALL Java_org_simgrid_msg_RngStream_randInt(JNIEnv *env, jobject jrngstream, jint i, jint j) {
141   RngStream rngstream = jrngstream_to_native(env, jrngstream);
142   if (!rngstream)
143     return 0;
144
145   return (jint)RngStream_RandInt(rngstream, (int)i, (int)j);
146 }