1
namespace VQDR.Common {
2
* The contests of this file is in the Public Domain.
4
* Created by Gustav Hartivgsson.
6
[CCode (cname = "V", cprefix = "v_")]
4
10
* At the moment this just wraps the GLib Rand things.
6
12
* This also provides a static version of the methods.
14
[CCode (cname = "VRandom", cprefix = "v_random_")]
8
15
public class Random {
10
private static Random? _instance = null;
17
private static GLib.Once<Utils.Random> _instance;
12
19
private GLib.Rand rand;
21
[CCode (cname = "v_random_new")]
14
22
private Random () {
15
23
this.rand = new GLib.Rand ();
26
[CCode (cname = "v_random_get_instance")]
18
27
public static Random get_instance () {
19
if (_instance == null) {
20
_instance = new Random ();
28
return _instance.once (() => {
25
33
/* **** Instance versions *** */
34
[CCode (cname = "v_random_get_double")]
26
35
public double get_double () {
27
36
return rand.next_double ();
39
[CCode (cname = "v_random_get_range")]
30
40
public double get_double_range (double begin, double end) {
31
41
return rand.double_range (begin, end);
34
public int get_int () {
35
return (int) rand.next_int ();
44
[CCode (cname = "v_random_get_int")]
45
public int32 get_int () {
46
return (int32) rand.next_int ();
38
public int get_int_range (int begin, int end) {
49
[CCode (cname = "v_random_get_int_range")]
50
public int32 get_int_range (int32 begin, int32 end) {
39
51
return rand.int_range ((int32) begin, (int32) end);
42
public void seed (int seed) {
43
rand.set_seed ((uint32) seed);
54
[CCode (cname = "v_random_seed")]
55
public void seed (int32 seed) {
56
rand.set_seed (seed.abs());
47
60
/* **** Static versions *** */
48
public static int get_static_int () {
61
[CCode (cname = "v_random_get_static_int")]
62
public static int32 get_static_int () {
49
63
Random r = Random.get_instance ();
50
64
return r.get_int ();
67
[CCode (cname = "v_random_get_static_double")]
53
68
public static double get_static_double () {
54
69
Random r = Random.get_instance ();
55
70
return r.get_double ();
58
public static int get_static_int_range (int begin, int end) {
73
[CCode (cname = "v_random_get_static_int_range")]
74
public static int32 get_static_int_range (int32 begin, int32 end) {
59
75
Random r = Random.get_instance ();
60
76
return r.get_int_range (begin, end);
79
[CCode (cname = "v_random_get_static_double_range")]
63
80
public static double get_static_double_range (double begin, double end) {
64
81
Random r = Random.get_instance ();
65
82
return r.get_double_range (begin, end);