pcg_random 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9d916ffcf05c6305989a4a440ad40a7b3b6143e
4
- data.tar.gz: 8db0e0f2fb5feee3390d0503c56f60ad0c33ce22
3
+ metadata.gz: e26f09fa3ea5290710f41975fcf1a22e4265e794
4
+ data.tar.gz: 792f5b3ffddb3c984d58aa93c8146443e7837682
5
5
  SHA512:
6
- metadata.gz: 8074251b1e55a97ede7e8d34e815067f5032908c809d6cf26c578a9c55abb4974bf1d071796396d4ef430cd02802c89763d1dd289a9dbe6945bcc373decb2672
7
- data.tar.gz: 8a0d123279a6973c28b4a10f33f42f58deac929fa37d1931067e20c34cd7b2b510ad16755d3b2cf3a8ebad8e0bc8c638de1aa83eb9f4529268c113e37db951e4
6
+ metadata.gz: 8bf992989aa751a8cd99dc153f78469dc3da4c16b6e2ec3e8dc8a8589aaa1407d0f78b42b9b1a33123ef6b0b83b3b700853afbac5bb23ccc9151e799cd8d7b92
7
+ data.tar.gz: 8addc87f54888e50b8bdeb08f6959da746054f5d8014c498842121596b6b0c64c314d1b5cd841fd650a97924cc6a69778cd2f36633428b1a352fd0f801ac73b4
@@ -0,0 +1,17 @@
1
+ ```bash
2
+ Benchmark of Random.new_seed vs PCGRandom.new_seed
3
+ ==================================================
4
+
5
+ Benchmark created around: 2016-03-25 18:27:27 +0000
6
+
7
+ Running for: 100000 iterations
8
+
9
+ Rehearsal ------------------------------------------------------
10
+ Random.new_seed 0.120000 1.060000 1.180000 ( 1.173928)
11
+ PCGRandom.new_seed 0.070000 1.020000 1.090000 ( 1.096108)
12
+ --------------------------------------------- total: 2.270000sec
13
+
14
+ user system total real
15
+ Random.new_seed 0.100000 1.090000 1.190000 ( 1.188864)
16
+ PCGRandom.new_seed 0.110000 1.090000 1.200000 ( 1.197528)
17
+ ```
@@ -1,26 +1,8 @@
1
1
  require 'benchmark'
2
2
  require 'pcg_random'
3
3
 
4
-
5
- # Benchmark of Random.new_seed vs PCGRandom.new_seed
6
- # ==================================================
7
- #
8
- # Benchmark created around: 2016-03-20 14:28:07 +0000
9
- #
10
- # Running for: 100000 iterations
11
- #
12
- # Rehearsal ------------------------------------------------------
13
- # Random.new_seed 0.110000 1.030000 1.140000 ( 1.135205)
14
- # PCGRandom.new_seed 0.090000 1.060000 1.150000 ( 1.157619)
15
- # --------------------------------------------- total: 2.290000sec
16
- #
17
- # user system total real
18
- # Random.new_seed 0.090000 1.250000 1.340000 ( 1.348947)
19
- # PCGRandom.new_seed 0.150000 1.000000 1.150000 ( 1.146167)
20
-
21
-
22
4
  Iterations = 100_000
23
-
5
+ puts "```bash"
24
6
  puts "Benchmark of Random.new_seed vs PCGRandom.new_seed"
25
7
  puts "=================================================="
26
8
  puts ""
@@ -32,8 +14,9 @@ Benchmark.bmbm do |bench|
32
14
  bench.report("Random.new_seed") do
33
15
  Iterations.times {Random.new_seed}
34
16
  end
35
-
17
+
36
18
  bench.report("PCGRandom.new_seed") do
37
19
  Iterations.times {PCGRandom.new_seed}
38
20
  end
39
- end
21
+ end
22
+ puts "```"
@@ -0,0 +1,17 @@
1
+ ```bash
2
+ Benchmark of Random.raw_seed(16) vs PCGRandom.raw_seed(16)
3
+ ==================================================
4
+
5
+ Benchmark created around: 2016-03-25 18:27:35 +0000
6
+
7
+ Running for: 100000 iterations
8
+
9
+ Rehearsal ----------------------------------------------------------
10
+ Random.raw_seed(16) 0.040000 0.980000 1.020000 ( 1.031410)
11
+ PCGRandom.raw_seed(16) 0.050000 0.970000 1.020000 ( 1.021024)
12
+ ------------------------------------------------- total: 2.040000sec
13
+
14
+ user system total real
15
+ Random.raw_seed(16) 0.090000 0.990000 1.080000 ( 1.076778)
16
+ PCGRandom.raw_seed(16) 0.060000 1.000000 1.060000 ( 1.067268)
17
+ ```
@@ -1,27 +1,10 @@
1
1
  require 'benchmark'
2
2
  require 'pcg_random'
3
3
 
4
-
5
- # Benchmark of Random.raw_seed(16) vs PCGRandom.raw_seed(16)
6
- # ==================================================
7
- #
8
- # Benchmark created around: 2016-03-20 14:34:40 +0000
9
- #
10
- # Running for: 100000 iterations
11
- #
12
- # Rehearsal ----------------------------------------------------------
13
- # Random.raw_seed(16) 0.060000 1.110000 1.170000 ( 1.173924)
14
- # PCGRandom.raw_seed(16) 0.060000 1.110000 1.170000 ( 1.175782)
15
- # ------------------------------------------------- total: 2.340000sec
16
- #
17
- # user system total real
18
- # Random.raw_seed(16) 0.060000 1.230000 1.290000 ( 1.292141)
19
- # PCGRandom.raw_seed(16) 0.080000 1.100000 1.180000 ( 1.189046)
20
-
21
-
22
-
23
4
  Iterations = 100_000
24
5
  SeedSize = 16
6
+
7
+ puts "```bash"
25
8
  puts "Benchmark of Random.raw_seed(#{SeedSize}) vs PCGRandom.raw_seed(#{SeedSize})"
26
9
  puts "=================================================="
27
10
  puts ""
@@ -33,8 +16,9 @@ Benchmark.bmbm do |bench|
33
16
  bench.report("Random.raw_seed(#{SeedSize})") do
34
17
  Iterations.times {Random.raw_seed SeedSize}
35
18
  end
36
-
19
+
37
20
  bench.report("PCGRandom.raw_seed(#{SeedSize})") do
38
21
  Iterations.times {PCGRandom.raw_seed SeedSize}
39
22
  end
40
- end
23
+ end
24
+ puts "```"
@@ -0,0 +1,3 @@
1
+ entropy.o: entropy.c pcg_spinlock.h entropy.h
2
+ pcg_random.o: pcg_random.c pcg_random.h pcg_seed.h
3
+ pcg_seed.o: pcg_seed.c entropy.h pcg_seed.h
@@ -1,8 +1,8 @@
1
- require "mkmf"
1
+ require 'mkmf'
2
2
 
3
3
  RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
4
4
 
5
- $CFLAGS = " -Wall -pedantic -ansi -std=c99"
5
+ $CFLAGS = " -ggdb -Wall -pedantic -std=c99"
6
6
 
7
7
  LIBDIR = RbConfig::CONFIG['libdir']
8
8
  INCLUDEDIR = RbConfig::CONFIG['includedir']
@@ -1,24 +1,193 @@
1
1
  #include <ruby.h>
2
+ #include <stdbool.h>
3
+ #include <stdint.h>
4
+ #include <math.h>
2
5
  #include <pcg_variants.h>
3
- #include <inttypes.h>
4
- #include <string.h>
5
6
 
6
- #include "rb_constants.h"
7
7
  #include "pcg_random.h"
8
8
  #include "pcg_seed.h"
9
9
 
10
10
  VALUE rb_cPCGRandom;
11
11
 
12
+ static void pcg_random_mark(void *ptr);
13
+ static void pcg_random_free(void *rand_data);
14
+ static size_t pcg_random_memsize(const void *ptr);
15
+ static pcg_rb_rand_t *pcg_get_rand_type(VALUE obj);
16
+ static VALUE pcg_random_alloc(VALUE klass);
17
+ static VALUE pcg_func_init(int argc, VALUE *argv, VALUE self);
18
+ static VALUE pcg_func_get_state(VALUE self);
19
+ static VALUE pcg_func_get_seq(VALUE self);
20
+
21
+ /*
22
+ * Structure wrapping our rng's data type's GC related functions
23
+ */
24
+ static const rb_data_type_t pcg_rand_data_t = {
25
+ "pcg_random",
26
+ {
27
+ pcg_random_mark,
28
+ pcg_random_free,
29
+ pcg_random_memsize,
30
+ },
31
+ };
32
+
33
+ /*
34
+ * Internal - Mark the internal seed value for garbage collection since a VALUE
35
+ * inside a C struct is not marked by the GC automatically, and isn't freed
36
+ * correctly either.
37
+ */
38
+ static void
39
+ pcg_random_mark(void *ptr)
40
+ {
41
+ rb_gc_mark(((pcg_rb_rand_t *) ptr)->seed.val);
42
+ }
43
+
44
+ /*
45
+ * Internal - Free internal C-types in the `pcg_rb_rand_t` struct
46
+ */
47
+ static void
48
+ pcg_random_free(void *rand_data)
49
+ {
50
+ xfree(((pcg_rb_rand_t *) rand_data)->rng);
51
+ xfree((pcg_rb_rand_t *)(rand_data));
52
+ }
53
+
54
+ /*
55
+ * Internal - Get the size of a valid pcg_rb_rand_t pointer
56
+ *
57
+ * @return the size of `pcg_rb_rand_t` struct if it is initialized correctly.
58
+ * 0 if given a NULL pointer
59
+ */
60
+ static size_t
61
+ pcg_random_memsize(const void *ptr)
62
+ {
63
+ return ptr ? sizeof(pcg_rb_rand_t) : 0;
64
+ }
65
+
66
+ /*
67
+ * Internal - Helper function to get a pointer to a pcg_rb_rand_t struct given
68
+ * an instance of the `PCGRandom` class
69
+ *
70
+ * Returns an object wrapping a C struct, with default initializations
71
+ */
72
+ static pcg_rb_rand_t *
73
+ pcg_get_rand_type(VALUE obj)
74
+ {
75
+ pcg_rb_rand_t *ptr;
76
+ TypedData_Get_Struct(obj, pcg_rb_rand_t, &pcg_rand_data_t, ptr);
77
+ return ptr;
78
+ }
79
+
80
+ /*
81
+ * Memory allocation function that is called by new before `initialize` is
82
+ * The chain is similar to: `new -> allocate -> initialize`
83
+ *
84
+ * Returns an object wrapping a C struct, with default initializations
85
+ */
86
+ static VALUE
87
+ pcg_random_alloc(VALUE klass)
88
+ {
89
+ pcg_rb_rand_t *rand_data;
90
+ VALUE obj;
91
+ /*
92
+ * ISO C forbids braced-groups within expressions
93
+ * See: http://stackoverflow.com/questions/1238016/
94
+ */
95
+ obj = __extension__ TypedData_Make_Struct(klass, pcg_rb_rand_t, &pcg_rand_data_t, rand_data);
96
+
97
+ rand_data->seed.val = INT2FIX(0);
98
+ rand_data->seed.state = 0;
99
+ rand_data->seed.seq = 0;
100
+ rand_data->rng = ALLOC(pcg32_random_t);
101
+
102
+ return obj;
103
+ }
104
+
105
+ /*
106
+ * Internal - Initialize the requested instance using a pre-allocated ruby
107
+ * object (TypedStruct). Sets the instance variables and relevant accessor
108
+ * methods where applicable.
109
+ */
110
+ static VALUE
111
+ pcg_func_init(int argc, VALUE *argv, VALUE self)
112
+ {
113
+ VALUE seed;
114
+ uint64_t cseeds[2];
115
+ pcg_rb_rand_t* rand_data = pcg_get_rand_type(self);
116
+
117
+ if(argc == 0)
118
+ {
119
+ seed = DEFAULT_SEED_VALUE;
120
+ }
121
+ else
122
+ {
123
+ rb_scan_args(argc, argv, "01", &seed);
124
+ }
125
+
126
+ rb_integer_pack(seed, (void *) cseeds, 2, sizeof(uint64_t), 0,
127
+ INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER);
128
+
129
+ rand_data->seed.val = seed;
130
+ rand_data->seed.state = cseeds[0];
131
+ rand_data->seed.seq = cseeds[1];
132
+ pcg32_srandom_r(rand_data->rng, cseeds[0], cseeds[1]);
133
+
134
+ /* Add & set private instance variables */
135
+ rb_iv_set(self, "@seed", seed);
136
+ rb_iv_set(self, "state", LONG2NUM(rand_data->seed.state));
137
+ rb_iv_set(self, "sequence", LONG2NUM(rand_data->seed.seq));
138
+ return self;
139
+ }
140
+
141
+ /*
142
+ * Internal - Private method to access internal rng state parameter
143
+ * (Most significant word of seed)
144
+ */
145
+ static VALUE
146
+ pcg_func_get_state(VALUE self)
147
+ {
148
+ VALUE state;
149
+ state = rb_iv_get(self, "state");
150
+ return state;
151
+ }
152
+
153
+ /*
154
+ * Internal - Private method to access internal rng state parameter
155
+ * (Most significant word of seed)
156
+ */
157
+ static VALUE
158
+ pcg_func_get_seq(VALUE self)
159
+ {
160
+ VALUE seq;
161
+ seq = rb_iv_get(self, "sequence");
162
+ return seq;
163
+ }
164
+
12
165
  void
13
166
  Init_pcg_random(void)
14
167
  {
15
- /* Initialize constants used by C-code*/
16
- pcg_init_rb_constants();
17
-
18
- /* Define encapsulating module */
168
+ /* Initializations */
169
+
170
+ /* Constants / Classes */
19
171
  rb_cPCGRandom = rb_define_class("PCGRandom", rb_cObject);
20
-
21
- /* Define methods under PCGRandom */
22
- rb_define_singleton_method(rb_cPCGRandom, "new_seed", pcg_func_new_seed, -1);
172
+
173
+ rb_define_const(rb_cPCGRandom, "DEFAULT_SEED_BYTES", INT2FIX(DEFAULT_SEED_BYTES));
174
+
175
+ /* Singleton methods */
176
+ rb_define_singleton_method(rb_cPCGRandom, "new_seed", pcg_func_new_seed, 0);
23
177
  rb_define_singleton_method(rb_cPCGRandom, "raw_seed", pcg_func_raw_seed, 1);
178
+
179
+ /* Public instance methods */
180
+ rb_define_alloc_func(rb_cPCGRandom, pcg_random_alloc);
181
+ rb_define_attr(rb_cPCGRandom, "seed", 1, 0);
182
+ // rb_define_method(rb_cPCGRandom, "rand", pcg_func_rand, -1);
183
+ // rb_define_method(rb_cPCGRandom, "bytes", pcg_func_rand_bytes, 1);
184
+ // rb_define_method(rb_cPCGRandom, "initialize_copy", pcg_func_rand_copy, 1);
185
+ // rb_define_method(rb_cPCGRandom, "==", pcg_func_equal, 1);
186
+
187
+ /* Private instance methods */
188
+ rb_define_method(rb_cPCGRandom, "initialize", pcg_func_init, -1);
189
+ // rb_define_private_method(rb_cPCGRandom, "marshal_dump", pcg_func_dump, 0);
190
+ // rb_define_private_method(rb_cPCGRandom, "marshal_load", pcg_func_load, 1);
191
+ rb_define_private_method(rb_cPCGRandom, "state", pcg_func_get_state, 0);
192
+ rb_define_private_method(rb_cPCGRandom, "sequence", pcg_func_get_seq, 0);
24
193
  }
@@ -2,8 +2,21 @@
2
2
  #define PCG_RANDOM_H 1
3
3
 
4
4
  #include <ruby.h>
5
- #include <inttypes.h>
5
+ #include <stdint.h>
6
6
 
7
7
  extern VALUE rb_cPCGRandom;
8
8
 
9
+ struct pcg_rb_seed
10
+ {
11
+ VALUE val;
12
+ uint64_t state;
13
+ uint64_t seq;
14
+ };
15
+
16
+ typedef struct
17
+ {
18
+ struct pcg_rb_seed seed;
19
+ pcg32_random_t *rng;
20
+ } pcg_rb_rand_t;
21
+
9
22
  #endif /* PCG_RANDOM_H */
@@ -4,49 +4,22 @@
4
4
  #include <stdint.h>
5
5
 
6
6
  #include "entropy.h"
7
- #include "rb_constants.h"
8
7
  #include "pcg_seed.h"
9
8
 
10
- static VALUE pcg_new_seed_bytestr(unsigned long seed_size);
11
- static VALUE pcg_raw_seed_bytestr(size_t size);
12
-
13
9
  /*
14
- * Returns a n-byte integer that stores the seed value used to seed the
10
+ * Returns a 16-byte integer that stores the seed value used to seed the
15
11
  * initial state and sequence for the PCG generator.
16
- * If no parameters are supplied it default to a 128-bit seed size
17
- *
18
- * @param size Number of bytes (EVEN!) that the generated seed must contain.
19
- * Defaults to 16 Bytes (uint8_t) = 128 bits
20
- *
21
- * @raise ArgumentError if size is not even
22
- */
12
+ */
23
13
  VALUE
24
- pcg_func_new_seed(int argc, VALUE *argv, VALUE self)
14
+ pcg_func_new_seed(VALUE self)
25
15
  {
26
- VALUE seed_size;
27
- unsigned long n;
28
-
29
- if(argc == 0)
30
- {
31
- return pcg_new_seed_bytestr(16 * sizeof(uint8_t));
32
- }
33
-
34
- rb_scan_args(argc, argv, "01", &seed_size);
35
- n = NUM2ULONG(seed_size);
36
-
37
- // Only accept even seed sizes since this later needs to be split into
38
- // two parts!
39
- if(n % 2 == 1)
40
- {
41
- rb_raise(rb_eArgError, "Seed size must be even! Found %lu", n);
42
- }
43
- return pcg_new_seed_bytestr(n * sizeof(uint8_t));
16
+ return DEFAULT_SEED_VALUE;
44
17
  }
45
18
 
46
19
  /*
47
- * Generates a random seed string represented as a sequence of bytes
20
+ * Generates a random seed string represented as a sequence of bytes
48
21
  *
49
- * @param size Size of the bytestring to generate
22
+ * @param byte_size Size of the bytestring to generate
50
23
  */
51
24
  VALUE
52
25
  pcg_func_raw_seed(VALUE self, VALUE byte_size)
@@ -59,11 +32,33 @@ pcg_func_raw_seed(VALUE self, VALUE byte_size)
59
32
  return pcg_raw_seed_bytestr(n);
60
33
  }
61
34
 
35
+ /*
36
+ * Gets `size` number of random bytes from a platform source
37
+ * and returns those as a ruby string
38
+ */
39
+ VALUE
40
+ pcg_raw_seed_bytestr(size_t size)
41
+ {
42
+ VALUE result;
43
+ char *bytestr = ALLOCA_N(char, size + 1);
44
+ if(bytestr == NULL)
45
+ {
46
+ rb_raise(rb_eNoMemError,
47
+ "Could not allocate enough space for %lu-byte seed!", size);
48
+ }
49
+ MEMZERO(bytestr, char, size + 1);
50
+ pcg_func_entropy_getbytes((void *)bytestr, size);
51
+
52
+ result = rb_str_new2(bytestr);
53
+
54
+ return result;
55
+ }
56
+
62
57
  /*
63
58
  * Generates a sequence of random bytes using device entropy
64
59
  * or a fallback mechanism based on pcg32_random_r
65
60
  */
66
- bool
61
+ bool
67
62
  pcg_func_entropy_getbytes(void *dest, size_t size)
68
63
  {
69
64
  // Get random bytes from /dev/random or a fallback source
@@ -76,65 +71,27 @@ pcg_func_entropy_getbytes(void *dest, size_t size)
76
71
  }
77
72
 
78
73
  /*
79
- * Internal - gets `size` number of random bytes from a platform source
80
- * and returns those as a ruby string
81
- */
82
- static VALUE
83
- pcg_raw_seed_bytestr(size_t size)
84
- {
85
- VALUE result;
86
- char *bytestr = (char *) malloc(size + 1);
87
- if(bytestr == NULL)
88
- {
89
- rb_raise(rb_eNoMemError,
90
- "Could not malloc enough space for %lu-byte seed!", size);
91
- }
92
- memset(bytestr, 0, size + 1);
93
- pcg_func_entropy_getbytes((void *)bytestr, size);
94
-
95
- result = rb_str_new2(bytestr);
96
- free(bytestr);
97
-
98
- return result;
99
- }
100
-
101
- /*
102
- * Internal - Two random integers are sourced from /dev/random or a fallback
103
- * source
74
+ * Random integers are sourced from /dev/random or a fallback
75
+ * source
104
76
  * Seed generated by manipulating a 16byte string & unpacking it to Q*
105
77
  */
106
- static VALUE
78
+ VALUE
107
79
  pcg_new_seed_bytestr(unsigned long seed_size)
108
80
  {
109
- VALUE result;
110
- uint8_t *bytes = (uint8_t *) malloc(seed_size * sizeof(uint8_t));
111
- unsigned long *buf = (unsigned long *) malloc(seed_size * sizeof(unsigned long));
112
-
113
- if(bytes == NULL || buf == NULL)
81
+ uint8_t *bytes = ALLOCA_N(uint8_t, seed_size);
82
+
83
+ if(bytes == NULL)
114
84
  {
115
- rb_raise(rb_eNoMemError, "Could not malloc enough memory!");
85
+ rb_raise(rb_eNoMemError, "Could not allocate enough memory!");
116
86
  }
117
-
118
- memset(bytes, 0, seed_size);
119
-
87
+
88
+ MEMZERO(bytes, uint8_t, seed_size);
89
+
120
90
  if(!pcg_func_entropy_getbytes((void *)bytes, seed_size))
121
91
  {
122
92
  rb_raise(rb_eRuntimeError, "Unable to generate seed!");
123
93
  }
124
-
125
- // Populate an array of longs to feed to rb_big_unpack()
126
- for(int i = 0; i < seed_size; ++i)
127
- {
128
- buf[i] = (unsigned long) bytes[i];
129
- }
130
-
131
- // Inspired from ruby's very own random.c
132
- // see: http://rxr.whitequark.org/mri/source/random.c#493
133
- // Also: http://rxr.whitequark.org/mri/source/random.c#443
134
- result = rb_big_unpack(buf, seed_size);
135
-
136
- free(bytes);
137
- free(buf);
138
-
139
- return result;
140
- }
94
+
95
+ return rb_integer_unpack((void *) bytes, seed_size, sizeof(uint8_t), 0,
96
+ INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER);
97
+ }
@@ -4,8 +4,20 @@
4
4
  #include <ruby.h>
5
5
  #include <stdbool.h>
6
6
 
7
- VALUE pcg_func_new_seed(int argc, VALUE *argv, VALUE self);
7
+ #ifndef DEFAULT_SEED_BYTES
8
+ # define DEFAULT_SEED_BYTES 16
9
+ #endif
10
+
11
+ #ifndef DEFAULT_SEED_VALUE
12
+ # define DEFAULT_SEED_VALUE pcg_new_seed_bytestr(DEFAULT_SEED_BYTES * sizeof(uint8_t))
13
+ #endif
14
+
8
15
  bool pcg_func_entropy_getbytes(void* dest, size_t size);
16
+
17
+ VALUE pcg_func_new_seed(VALUE self);
18
+ VALUE pcg_new_seed_bytestr(unsigned long seed_size);
19
+
9
20
  VALUE pcg_func_raw_seed(VALUE self, VALUE byte_size);
21
+ VALUE pcg_raw_seed_bytestr(size_t size);
10
22
 
11
23
  #endif /* PCG_SEED_H */
@@ -1,3 +1,3 @@
1
1
  class PCGRandom
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pcg_random
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vaibhav Yenamandra
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-20 00:00:00.000000000 Z
11
+ date: 2016-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -96,10 +96,13 @@ files:
96
96
  - LICENSE.txt
97
97
  - README.md
98
98
  - Rakefile
99
+ - benchmarks/new_seed.md
99
100
  - benchmarks/new_seed_bench.rb
101
+ - benchmarks/raw_seed.md
100
102
  - benchmarks/raw_seed_bench.rb
101
103
  - bin/console
102
104
  - bin/setup
105
+ - ext/pcg_random/depend
103
106
  - ext/pcg_random/entropy.c
104
107
  - ext/pcg_random/entropy.h
105
108
  - ext/pcg_random/extconf.rb
@@ -108,8 +111,6 @@ files:
108
111
  - ext/pcg_random/pcg_seed.c
109
112
  - ext/pcg_random/pcg_seed.h
110
113
  - ext/pcg_random/pcg_spinlock.h
111
- - ext/pcg_random/rb_constants.c
112
- - ext/pcg_random/rb_constants.h
113
114
  - lib/pcg_random.rb
114
115
  - lib/pcg_random/version.rb
115
116
  - pcg_random.gemspec
@@ -1,26 +0,0 @@
1
- #include <ruby.h>
2
- #include "rb_constants.h"
3
-
4
- VALUE pcg_rb_zero,
5
- pcg_rb_one,
6
- pcg_rb_big_zero,
7
- pcg_rb_big_one;
8
-
9
-
10
- ID pcg_rb_plus,
11
- pcg_rb_mul;
12
-
13
- void
14
- pcg_init_rb_constants(void)
15
- {
16
- // Commonly used ruby objects
17
- pcg_rb_zero = INT2FIX(0);
18
- pcg_rb_one = INT2FIX(1);
19
-
20
- pcg_rb_big_zero = rb_uint2big(0);
21
- pcg_rb_big_one = rb_uint2big(1);
22
-
23
- // Commonly called functions
24
- pcg_rb_plus = rb_intern("+");
25
- pcg_rb_mul = rb_intern("*");
26
- }
@@ -1,16 +0,0 @@
1
- #ifndef PCG_RB_CONSTANTS_H
2
- #define PCG_RB_CONSTANTS_H 1
3
-
4
- #include <ruby.h>
5
-
6
- extern VALUE pcg_rb_zero,
7
- pcg_rb_one,
8
- pcg_rb_big_zero,
9
- pcg_rb_big_one;
10
-
11
- extern ID pcg_rb_plus,
12
- pcg_rb_mul;
13
-
14
- void pcg_init_rb_constants(void);
15
-
16
- #endif /* PCG_RB_CONSTANTS_H */