1 /* Functions related to the RngStream Java port */
3 /* Copyright (c) 2007-2015. 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) {
15 RngStream rngstream = (RngStream)(intptr_t)env->GetLongField(jrngstream, jrngstream_bind);
17 jxbt_throw_notbound(env, "rngstream", jrngstream);
23 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_nativeInit(JNIEnv *env, jclass cls) {
24 jclass class_RngStream = env->FindClass("org/simgrid/msg/RngStream");
26 jrngstream_bind = jxbt_get_jfield(env, class_RngStream, "bind", "J");
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);
35 env->ReleaseStringUTFChars(jname, name);
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);
44 JNIEXPORT jboolean JNICALL
45 Java_org_simgrid_msg_RngStream_setPackageSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
48 env->GetIntArrayRegion(jseed, 0, 6, buffer);
50 RngStream rngstream = jrngstream_to_native(env, jrngstream);
54 int result = RngStream_SetPackageSeed((unsigned long*)buffer);
56 return result == -1 ? JNI_FALSE : JNI_TRUE;
59 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStart(JNIEnv *env, jobject jrngstream) {
60 RngStream rngstream = jrngstream_to_native(env, jrngstream);
64 RngStream_ResetStartStream(rngstream);
67 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStartSubstream(JNIEnv *env, jobject jrngstream) {
68 RngStream rngstream = jrngstream_to_native(env, jrngstream);
72 RngStream_ResetStartSubstream(rngstream);
75 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetNextSubstream(JNIEnv *env, jobject jrngstream) {
76 RngStream rngstream = jrngstream_to_native(env, jrngstream);
80 RngStream_ResetNextSubstream(rngstream);
83 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_setAntithetic(JNIEnv *env, jobject jrngstream, jboolean ja) {
84 RngStream rngstream = jrngstream_to_native(env, jrngstream);
89 RngStream_SetAntithetic(rngstream,-1);
92 RngStream_SetAntithetic(rngstream,0);
96 JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
99 env->GetIntArrayRegion(jseed, 0, 6, buffer);
101 RngStream rngstream = jrngstream_to_native(env, jrngstream);
105 int result = RngStream_SetSeed(rngstream, (unsigned long*)buffer);
107 return result == -1 ? JNI_FALSE : JNI_TRUE;
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);
115 RngStream_AdvanceState(rngstream, (long)e, (long)g);
118 JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_RngStream_randU01(JNIEnv *env, jobject jrngstream) {
119 RngStream rngstream = jrngstream_to_native(env, jrngstream);
123 return (jdouble)RngStream_RandU01(rngstream);
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);
131 return (jint)RngStream_RandInt(rngstream, (int)i, (int)j);