Logo AND Algorithmique Numérique Distribuée

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