Example #1
0
static mrb_value
mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary)
{
  mrb_int i;
  mrb_value random = mrb_nil_value();
  
  if (RARRAY_LEN(ary) > 1) {
    mrb_get_args(mrb, "|o", &random);

    if( mrb_nil_p(random) ) {
      mrb_random_g_rand_seed(mrb);
    } else {
      mrb_data_check_type(mrb, random, &mt_state_type);
      mrb_random_rand_seed(mrb, random);
    }
  
    mrb_ary_modify(mrb, mrb_ary_ptr(ary));
    
    for (i = RARRAY_LEN(ary) - 1; i > 0; i--)  {
      mrb_int j;
      
      if( mrb_nil_p(random) ) {
        j = mrb_fixnum(mrb_random_mt_g_rand(mrb, mrb_fixnum_value(RARRAY_LEN(ary))));
      } else {
        j = mrb_fixnum(mrb_random_mt_rand(mrb, DATA_PTR(random), mrb_fixnum_value(RARRAY_LEN(ary))));
      }
      
      mrb_value t = RARRAY_PTR(ary)[i];
      RARRAY_PTR(ary)[i] = RARRAY_PTR(ary)[j];
      RARRAY_PTR(ary)[j] = t;
    }    
  }
  
  return ary;
}
Example #2
0
static mrb_value mrb_ssl_set_socket(mrb_state *mrb, mrb_value self) {
  ssl_context *ssl;
  struct mrb_io *fptr;
  mrb_value socket;

  mrb_get_args(mrb, "o", &socket);
  mrb_data_check_type(mrb, socket, &mrb_io_type);
  fptr = DATA_CHECK_GET_PTR(mrb, socket, &mrb_io_type, struct mrb_io);
  ssl = DATA_CHECK_GET_PTR(mrb, self, &mrb_ssl_type, ssl_context);
  ssl_set_bio( ssl, net_recv, &fptr->fd, net_send, &fptr->fd );
  return mrb_true_value();
}
Example #3
0
static mrb_value mrb_ssl_set_rng(mrb_state *mrb, mrb_value self) {
  ssl_context *ssl;
  ctr_drbg_context *ctr_drbg;
  mrb_value rng;

  mrb_get_args(mrb, "o", &rng);
  mrb_data_check_type(mrb, rng, &mrb_ctr_drbg_type);
  ctr_drbg = DATA_CHECK_GET_PTR(mrb, rng, &mrb_ctr_drbg_type, ctr_drbg_context);
  ssl = DATA_CHECK_GET_PTR(mrb, self, &mrb_ssl_type, ssl_context);
  ssl_set_rng(ssl, ctr_drbg_random, ctr_drbg);
  return mrb_true_value();
}