Logo AND Algorithmique Numérique Distribuée

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