示例#1
0
文件: RngWrap.c 项目: hanase/rlecuyer
SEXP r_set_stream_seed(SEXP sexp_seed, SEXP sexp_streamCg,SEXP sexp_streamBg,
                       SEXP sexp_streamIg,
                       SEXP sexp_streamAnti,SEXP sexp_streamIncPrec,
                       SEXP sexp_streamName)
{
    SEXP sexp_stream;
    RngStream stream;
    unsigned long seed[6];
    int i;
    const char *name;
    size_t len;

    stream = (RngStream) malloc (sizeof (struct RngStream_InfoState));
    if (stream == NULL) {
        error("r_set_stream_seed: No more memory\n\n");
    }

    for (i=0; i<6; i++) {
        stream->Cg[i] = REAL(sexp_streamCg)[i];
        stream->Bg[i] = REAL(sexp_streamBg)[i];
        stream->Ig[i] = REAL(sexp_streamIg)[i];
    }
    stream->Anti = INTEGER(sexp_streamAnti)[0];
    stream->IncPrec = INTEGER(sexp_streamIncPrec)[0];
    name = CHAR(STRING_ELT(sexp_streamName,0));
    len = strlen(name);
    stream->name = malloc(len+1);
    if (stream->name == NULL) {
        free(stream);
        error("r_set_stream_seed: No more memory\n\n");
    }
    strncpy(stream->name, name, len+1);

    for (i = 0; i < 6; ++i) {
        seed[i]= (unsigned long) REAL (sexp_seed)[i];
    }

    RngStream_SetSeed(stream, (unsigned long *) seed);
    PROTECT(sexp_stream = allocVector(REALSXP, 20));

    for (i = 0; i < 6; ++i) {
        REAL(sexp_stream)[i] = (double) stream->Cg[i];
        REAL(sexp_stream)[i+6] = (double) stream->Bg[i];
        REAL(sexp_stream)[i+12] = (double) stream->Ig[i];
    }
    REAL(sexp_stream)[18] = (int) stream->Anti;
    REAL(sexp_stream)[19] = (int) stream->IncPrec;
    UNPROTECT(1);

    free(stream);
    return sexp_stream;
}
示例#2
0
JNIEXPORT jboolean JNICALL
Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
  jint buffer[6];

  env->GetIntArrayRegion(jseed, 0, 6, buffer);

  RngStream rngstream = jrngstream_to_native(env, jrngstream);
  if (!rngstream)
    return JNI_FALSE;


  int result = RngStream_SetSeed(rngstream, (unsigned long*)buffer);

  return result == -1 ? JNI_FALSE : JNI_TRUE;
}
示例#3
0
文件: main.c 项目: camilo1729/distem
// seed MUST be an array of at least 6 numbers, or you will get a segfault !
VALUE rng_set_seed(VALUE self, VALUE seed) {
  unsigned long seed_arr[6];
  int i;
  
  for(i=0 ; i<6 ; i++) {
    seed_arr[i] = NUM2ULONG(rb_ary_entry(seed, i));
  }
  VALUE stream_ptr = rb_iv_get(self, "@stream_prt");
  RngStream stream;
  Data_Get_Struct(stream_ptr, RngStream, stream);

  int error = RngStream_SetSeed(stream, seed_arr);
  if(error) {
    rb_raise(rb_eArgError, "Invalid seed");
  }
  RngStream_ResetStartStream(stream);
  return self;
}
JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
  jint buffer[6];

  env->GetIntArrayRegion(jseed, 0, 6, buffer);

  RngStream rngstream = jrngstream_to_native(env, jrngstream);
  if (!rngstream)
    return JNI_FALSE;

  // 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;
}
示例#5
0
	void set_seed(int seed1, int seed2=0) {
		unsigned long seeds[6] = { seed1, seed2, seed1, seed2, seed1, seed2 };
		RngStream_SetSeed(_stream, seeds);
	}