Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
f863025b
Commit
f863025b
authored
Feb 21, 2014
by
take_cheeze
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use 'd' format spec to get Random object
parent
8060478b
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
20 deletions
+32
-20
mrbgems/mruby-random/src/mt19937ar.c
mrbgems/mruby-random/src/mt19937ar.c
+1
-0
mrbgems/mruby-random/src/mt19937ar.h
mrbgems/mruby-random/src/mt19937ar.h
+3
-0
mrbgems/mruby-random/src/random.c
mrbgems/mruby-random/src/random.c
+28
-20
No files found.
mrbgems/mruby-random/src/mt19937ar.c
View file @
f863025b
...
...
@@ -4,6 +4,7 @@
** See Copyright Notice in mruby.h
*/
#include "mruby.h"
#include "mt19937ar.h"
/* Period parameters */
...
...
mrbgems/mruby-random/src/mt19937ar.h
View file @
f863025b
...
...
@@ -13,6 +13,9 @@ typedef struct {
unsigned
long
gen_int
;
double
gen_dbl
;
};
mrb_int
seed
;
mrb_bool
has_seed
;
}
mt_state
;
void
mrb_random_init_genrand
(
mt_state
*
,
unsigned
long
);
...
...
mrbgems/mruby-random/src/random.c
View file @
f863025b
...
...
@@ -14,7 +14,6 @@
#include <time.h>
static
char
const
GLOBAL_RAND_SEED_KEY
[]
=
"$mrb_g_rand_seed"
;
static
char
const
INSTANCE_RAND_SEED_KEY
[]
=
"$mrb_i_rand_seed"
;
static
char
const
MT_STATE_KEY
[]
=
"$mrb_i_mt_state"
;
static
const
struct
mrb_data_type
mt_state_type
=
{
...
...
@@ -188,7 +187,14 @@ mrb_random_init(mrb_state *mrb, mrb_value self)
seed
=
get_opt
(
mrb
);
seed
=
mrb_random_mt_srand
(
mrb
,
t
,
seed
);
mrb_iv_set
(
mrb
,
self
,
mrb_intern_lit
(
mrb
,
INSTANCE_RAND_SEED_KEY
),
seed
);
if
(
mrb_nil_p
(
seed
))
{
t
->
has_seed
=
FALSE
;
}
else
{
mrb_assert
(
mrb_fixnum_p
(
seed
));
t
->
has_seed
=
TRUE
;
t
->
seed
=
mrb_fixnum
(
seed
);
}
DATA_PTR
(
self
)
=
t
;
...
...
@@ -196,13 +202,9 @@ mrb_random_init(mrb_state *mrb, mrb_value self)
}
static
void
mrb_random_rand_seed
(
mrb_state
*
mrb
,
m
rb_value
self
)
mrb_random_rand_seed
(
mrb_state
*
mrb
,
m
t_state
*
t
)
{
mrb_value
seed
;
mt_state
*
t
=
DATA_PTR
(
self
);
seed
=
mrb_iv_get
(
mrb
,
self
,
mrb_intern_lit
(
mrb
,
INSTANCE_RAND_SEED_KEY
));
if
(
mrb_nil_p
(
seed
))
{
if
(
!
t
->
has_seed
)
{
mrb_random_mt_srand
(
mrb
,
t
,
mrb_nil_value
());
}
}
...
...
@@ -214,7 +216,7 @@ mrb_random_rand(mrb_state *mrb, mrb_value self)
mt_state
*
t
=
DATA_PTR
(
self
);
max
=
get_opt
(
mrb
);
mrb_random_rand_seed
(
mrb
,
self
);
mrb_random_rand_seed
(
mrb
,
t
);
return
mrb_random_mt_rand
(
mrb
,
t
,
max
);
}
...
...
@@ -227,8 +229,15 @@ mrb_random_srand(mrb_state *mrb, mrb_value self)
seed
=
get_opt
(
mrb
);
seed
=
mrb_random_mt_srand
(
mrb
,
t
,
seed
);
old_seed
=
mrb_iv_get
(
mrb
,
self
,
mrb_intern_lit
(
mrb
,
INSTANCE_RAND_SEED_KEY
));
mrb_iv_set
(
mrb
,
self
,
mrb_intern_lit
(
mrb
,
INSTANCE_RAND_SEED_KEY
),
seed
);
old_seed
=
t
->
has_seed
?
mrb_fixnum_value
(
t
->
seed
)
:
mrb_nil_value
();
if
(
mrb_nil_p
(
seed
))
{
t
->
has_seed
=
FALSE
;
}
else
{
mrb_assert
(
mrb_fixnum_p
(
seed
));
t
->
has_seed
=
TRUE
;
t
->
seed
=
mrb_fixnum
(
seed
);
}
return
old_seed
;
}
...
...
@@ -244,17 +253,16 @@ static mrb_value
mrb_ary_shuffle_bang
(
mrb_state
*
mrb
,
mrb_value
ary
)
{
mrb_int
i
;
m
rb_value
random
=
mrb_nil_value
()
;
m
t_state
*
random
=
NULL
;
if
(
RARRAY_LEN
(
ary
)
>
1
)
{
mrb_get_args
(
mrb
,
"|
o"
,
&
random
);
mrb_get_args
(
mrb
,
"|
d"
,
&
random
,
&
mt_state_type
);
if
(
mrb_nil_p
(
random
)
)
{
mrb_random_
g_rand_seed
(
mrb
);
if
(
random
)
{
mrb_random_
rand_seed
(
mrb
,
random
);
}
else
{
mrb_data_check_type
(
mrb
,
random
,
&
mt_state_type
);
mrb_random_rand_seed
(
mrb
,
random
);
mrb_random_g_rand_seed
(
mrb
);
}
mrb_ary_modify
(
mrb
,
mrb_ary_ptr
(
ary
));
...
...
@@ -263,11 +271,11 @@ mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary)
mrb_int
j
;
mrb_value
tmp
;
if
(
mrb_nil_p
(
random
)
)
{
j
=
mrb_fixnum
(
mrb_random_mt_
g_rand
(
mrb
,
mrb_fixnum_value
(
RARRAY_LEN
(
ary
))));
if
(
random
)
{
j
=
mrb_fixnum
(
mrb_random_mt_
rand
(
mrb
,
random
,
mrb_fixnum_value
(
RARRAY_LEN
(
ary
))));
}
else
{
j
=
mrb_fixnum
(
mrb_random_mt_
rand
(
mrb
,
DATA_PTR
(
random
)
,
mrb_fixnum_value
(
RARRAY_LEN
(
ary
))));
j
=
mrb_fixnum
(
mrb_random_mt_
g_rand
(
mrb
,
mrb_fixnum_value
(
RARRAY_LEN
(
ary
))));
}
tmp
=
RARRAY_PTR
(
ary
)[
i
];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment