1 /* Functions related to the RngStream Java port */
3 /* Copyright (c) 2007-2014. The SimGrid Team.
4 * All rights reserved. */
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. */
9 #include "jmsg_rngstream.h"
10 #include "jxbt_utilities.h"
12 jfieldID jrngstream_bind;
14 RngStream jrngstream_to_native(JNIEnv *env, jobject jrngstream) {
16 (RngStream)(intptr_t)(*env)->GetLongField(env, jrngstream, jrngstream_bind);
18 jxbt_throw_notbound(env, "rngstream", jrngstream);
24 JNIEXPORT void JNICALL
25 Java_org_simgrid_msg_RngStream_nativeInit(JNIEnv *env, jclass cls) {
26 jclass class_RngStream = (*env)->FindClass(env, "org/simgrid/msg/RngStream");
28 jrngstream_bind = jxbt_get_jfield(env, class_RngStream, "bind", "J");
31 JNIEXPORT void JNICALL
32 Java_org_simgrid_msg_RngStream_create(JNIEnv *env, jobject jrngstream, jstring jname) {
33 const char *name = (*env)->GetStringUTFChars(env, jname, 0);
34 RngStream rngstream = RngStream_CreateStream(name);
35 //Bind the RngStream object
36 (*env)->SetLongField(env, jrngstream, jrngstream_bind, (intptr_t)rngstream);
38 (*env)->ReleaseStringUTFChars(env, jname, name);
40 JNIEXPORT void JNICALL
41 Java_org_simgrid_msg_RngStream_destroy(JNIEnv *env, jobject jrngstream) {
42 RngStream rngstream = jrngstream_to_native(env, jrngstream);
43 RngStream_DeleteStream(&rngstream);
44 (*env)->SetLongField(env, jrngstream, jrngstream_bind, (intptr_t)NULL);
46 JNIEXPORT jboolean JNICALL
47 Java_org_simgrid_msg_RngStream_setPackageSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
50 (*env)->GetIntArrayRegion(env, jseed, 0, 6, buffer);
52 RngStream rngstream = jrngstream_to_native(env, jrngstream);
56 int result = RngStream_SetPackageSeed((unsigned long*)buffer);
58 return result == -1 ? JNI_FALSE : JNI_TRUE;
60 JNIEXPORT void JNICALL
61 Java_org_simgrid_msg_RngStream_resetStart(JNIEnv *env, jobject jrngstream) {
62 RngStream rngstream = jrngstream_to_native(env, jrngstream);
66 RngStream_ResetStartStream(rngstream);
68 JNIEXPORT void JNICALL
69 Java_org_simgrid_msg_RngStream_resetStartSubstream(JNIEnv *env, jobject jrngstream) {
70 RngStream rngstream = jrngstream_to_native(env, jrngstream);
74 RngStream_ResetStartSubstream(rngstream);
76 JNIEXPORT void JNICALL
77 Java_org_simgrid_msg_RngStream_resetNextSubstream(JNIEnv *env, jobject jrngstream) {
78 RngStream rngstream = jrngstream_to_native(env, jrngstream);
82 RngStream_ResetNextSubstream(rngstream);
84 JNIEXPORT void JNICALL
85 Java_org_simgrid_msg_RngStream_setAntithetic(JNIEnv *env, jobject jrngstream, jboolean ja) {
86 RngStream rngstream = jrngstream_to_native(env, jrngstream);
91 RngStream_SetAntithetic(rngstream,-1);
94 RngStream_SetAntithetic(rngstream,0);
97 JNIEXPORT jboolean JNICALL
98 Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
101 (*env)->GetIntArrayRegion(env, jseed, 0, 6, buffer);
103 RngStream rngstream = jrngstream_to_native(env, jrngstream);
108 int result = RngStream_SetSeed(rngstream, (unsigned long*)buffer);
110 return result == -1 ? JNI_FALSE : JNI_TRUE;
112 JNIEXPORT void JNICALL
113 Java_org_simgrid_msg_RngStream_advanceState(JNIEnv *env, jobject jrngstream, jint e, jint g) {
114 RngStream rngstream = jrngstream_to_native(env, jrngstream);
118 RngStream_AdvanceState(rngstream, (long)e, (long)g);
120 JNIEXPORT jdouble JNICALL
121 Java_org_simgrid_msg_RngStream_randU01(JNIEnv *env, jobject jrngstream) {
122 RngStream rngstream = jrngstream_to_native(env, jrngstream);
126 return (jdouble)RngStream_RandU01(rngstream);
128 JNIEXPORT jint JNICALL
129 Java_org_simgrid_msg_RngStream_randInt(JNIEnv *env, jobject jrngstream, jint i, jint j) {
130 RngStream rngstream = jrngstream_to_native(env, jrngstream);
134 return (jint)RngStream_RandInt(rngstream, (int)i, (int)j);