X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d5cf915bd09762c921e587f376420993f216a239..16673e04b393c2d8c031d0d77ec318ac2c711f4e:/src/bindings/java/jmsg_rngstream.cpp diff --git a/src/bindings/java/jmsg_rngstream.cpp b/src/bindings/java/jmsg_rngstream.cpp index 11db6a5467..1d4987cf87 100644 --- a/src/bindings/java/jmsg_rngstream.cpp +++ b/src/bindings/java/jmsg_rngstream.cpp @@ -1,19 +1,20 @@ -/* Functions related to the RngStream Java port */ +/* Java binding of the RngStream library */ -/* Copyright (c) 2007-2015. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2007-2019. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include "xbt/sysdep.h" + #include "jmsg_rngstream.h" -#include "jxbt_utilities.h" +#include "jxbt_utilities.hpp" jfieldID jrngstream_bind; RngStream jrngstream_to_native(JNIEnv *env, jobject jrngstream) { RngStream rngstream = (RngStream)(intptr_t)env->GetLongField(jrngstream, jrngstream_bind); - if (!rngstream) { + if (not rngstream) { jxbt_throw_notbound(env, "rngstream", jrngstream); return nullptr; } @@ -43,22 +44,28 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_nativeFinalize(JNIEnv *env JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_RngStream_setPackageSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) { - jint buffer[6]; - env->GetIntArrayRegion(jseed, 0, 6, buffer); - - RngStream rngstream = jrngstream_to_native(env, jrngstream); - if (!rngstream) + if (jseed == nullptr) { + jxbt_throw_null(env, xbt_strdup("seed argument is null")); return JNI_FALSE; + } - int result = RngStream_SetPackageSeed((unsigned long*)buffer); + jint buffer[6]; + env->GetIntArrayRegion(jseed, 0, 6, buffer); + // The C API expects unsigned long which are wider than int on LP64. + // We need to convert: + unsigned long seed[6]; + for (int i = 0; i != 6; ++i) + seed[i] = buffer[i]; + + int result = RngStream_SetPackageSeed(seed); return result == -1 ? JNI_FALSE : JNI_TRUE; } JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStart(JNIEnv *env, jobject jrngstream) { RngStream rngstream = jrngstream_to_native(env, jrngstream); - if (!rngstream) + if (not rngstream) return; RngStream_ResetStartStream(rngstream); @@ -66,7 +73,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStart(JNIEnv *env, jo JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStartSubstream(JNIEnv *env, jobject jrngstream) { RngStream rngstream = jrngstream_to_native(env, jrngstream); - if (!rngstream) + if (not rngstream) return; RngStream_ResetStartSubstream(rngstream); @@ -74,7 +81,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStartSubstream(JNIEnv JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetNextSubstream(JNIEnv *env, jobject jrngstream) { RngStream rngstream = jrngstream_to_native(env, jrngstream); - if (!rngstream) + if (not rngstream) return; RngStream_ResetNextSubstream(rngstream); @@ -82,7 +89,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetNextSubstream(JNIEnv JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_setAntithetic(JNIEnv *env, jobject jrngstream, jboolean ja) { RngStream rngstream = jrngstream_to_native(env, jrngstream); - if (!rngstream) + if (not rngstream) return; if (ja == JNI_TRUE) { @@ -99,17 +106,23 @@ JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, j env->GetIntArrayRegion(jseed, 0, 6, buffer); RngStream rngstream = jrngstream_to_native(env, jrngstream); - if (!rngstream) + if (not rngstream) return JNI_FALSE; - int result = RngStream_SetSeed(rngstream, (unsigned long*)buffer); + // The C API expects unsigned long which are wider than int on LP64. + // We need to convert: + unsigned long seed[6]; + for (int i = 0; i != 6; ++i) + seed[i] = buffer[i]; + + int result = RngStream_SetSeed(rngstream, seed); return result == -1 ? JNI_FALSE : JNI_TRUE; } JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_advanceState(JNIEnv *env, jobject jrngstream, jint e, jint g) { RngStream rngstream = jrngstream_to_native(env, jrngstream); - if (!rngstream) + if (not rngstream) return; RngStream_AdvanceState(rngstream, (long)e, (long)g); @@ -117,7 +130,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_advanceState(JNIEnv *env, JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_RngStream_randU01(JNIEnv *env, jobject jrngstream) { RngStream rngstream = jrngstream_to_native(env, jrngstream); - if (!rngstream) + if (not rngstream) return 0; return (jdouble)RngStream_RandU01(rngstream); @@ -125,7 +138,7 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_RngStream_randU01(JNIEnv *env, jo JNIEXPORT jint JNICALL Java_org_simgrid_msg_RngStream_randInt(JNIEnv *env, jobject jrngstream, jint i, jint j) { RngStream rngstream = jrngstream_to_native(env, jrngstream); - if (!rngstream) + if (not rngstream) return 0; return (jint)RngStream_RandInt(rngstream, (int)i, (int)j);