primesieve 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e9031aa8943664d27211a80ce6292c2c10a98037
4
+ data.tar.gz: b072982a8ea70aa8be378dc17387eeb9345f351d
5
+ SHA512:
6
+ metadata.gz: d04e858b99d6212829d9aa345c2defc5505279bc305815c505e8426ede15252c03700b4f36d16a9299cf6a4b53d3cc7448116da1e0d7af9dfbf516002d38b7d6
7
+ data.tar.gz: eff00f0a834bf3baf7bad1d0335f062b13b029ee155773977a84014a013c91ecb3cbb0486ecdcc5c892c6a2c8c027e90bda2105e17416f8b52326057c52614a6
@@ -0,0 +1,63 @@
1
+ require "mkmf"
2
+
3
+ LIBDIR = RbConfig::CONFIG['libdir']
4
+ INCLUDEDIR = RbConfig::CONFIG['includedir']
5
+
6
+ HEADER_DIRS = [
7
+ '/usr/local/include',
8
+ INCLUDEDIR,
9
+ '/usr/include',
10
+ ]
11
+
12
+ LIB_DIRS = [
13
+ '/usr/local/lib',
14
+ LIBDIR,
15
+ '/usr/lib',
16
+ ]
17
+
18
+ dir_config('primesieve', HEADER_DIRS, LIB_DIRS)
19
+
20
+ fns = [
21
+ 'primesieve_generate_primes',
22
+ 'primesieve_generate_n_primes',
23
+ 'primesieve_nth_prime',
24
+ 'primesieve_parallel_nth_prime',
25
+ 'primesieve_count_primes',
26
+ 'primesieve_count_twins',
27
+ 'primesieve_count_triplets',
28
+ 'primesieve_count_quadruplets',
29
+ 'primesieve_count_quintuplets',
30
+ 'primesieve_count_sextuplets',
31
+ 'primesieve_parallel_count_primes',
32
+ 'primesieve_parallel_count_twins',
33
+ 'primesieve_parallel_count_triplets',
34
+ 'primesieve_parallel_count_quadruplets',
35
+ 'primesieve_parallel_count_quintuplets',
36
+ 'primesieve_parallel_count_sextuplets',
37
+ 'primesieve_print_primes',
38
+ 'primesieve_print_twins',
39
+ 'primesieve_print_triplets',
40
+ 'primesieve_print_quadruplets',
41
+ 'primesieve_print_quintuplets',
42
+ 'primesieve_print_sextuplets',
43
+ 'primesieve_callback_primes',
44
+ 'primesieve_parallel_callback_primes',
45
+ 'primesieve_get_sieve_size',
46
+ 'primesieve_get_num_threads',
47
+ 'primesieve_get_max_stop',
48
+ 'primesieve_set_sieve_size',
49
+ 'primesieve_set_num_threads',
50
+ 'primesieve_test'
51
+ ]
52
+
53
+ unless find_header('primesieve.h')
54
+ abort 'primesieve header is missing. please install primesieve'
55
+ end
56
+
57
+ fns.each do |fn|
58
+ unless find_library('primesieve', fn)
59
+ abort "primesieve library is missing. could not find function #{fn}. please install primesieve"
60
+ end
61
+ end
62
+
63
+ create_makefile("primesieve/primesieve")
@@ -0,0 +1,196 @@
1
+ #include <primesieve-ruby.h>
2
+
3
+ VALUE mPrimesieve;
4
+
5
+ static VALUE generate_primes(VALUE self, VALUE start, VALUE stop) {
6
+ size_t size, i;
7
+ uint64_t* primes = (uint64_t *) primesieve_generate_primes(NUM2ULL(start), NUM2ULL(stop), &size, UINT64_PRIMES);
8
+ VALUE ruby_primes = rb_ary_new2(size);
9
+ for(i = 0; i < size; i++) {
10
+ rb_ary_store(ruby_primes, i, ULL2NUM(primes[i]));
11
+ }
12
+ primesieve_free(primes);
13
+ return ruby_primes;
14
+ }
15
+
16
+ static VALUE generate_n_primes(VALUE self, VALUE n, VALUE start) {
17
+ long i;
18
+ uint64_t* primes = (uint64_t *) primesieve_generate_n_primes(NUM2ULL(n), NUM2ULL(start), UINT64_PRIMES);
19
+ VALUE ruby_primes = rb_ary_new2(NUM2LONG(n));
20
+ for(i = 0; i < NUM2LONG(n); i++) {
21
+ rb_ary_store(ruby_primes, i, ULL2NUM(primes[i]));
22
+ }
23
+ primesieve_free(primes);
24
+ return ruby_primes;
25
+ }
26
+
27
+ static VALUE nth_prime(VALUE self, VALUE n, VALUE start) {
28
+ return ULL2NUM(primesieve_nth_prime(NUM2LL(n), NUM2ULL(start)));
29
+ }
30
+
31
+ static VALUE parallel_nth_prime(VALUE self, VALUE n, VALUE start) {
32
+ return ULL2NUM(primesieve_parallel_nth_prime(NUM2LL(n), NUM2ULL(start)));
33
+ }
34
+
35
+ static VALUE count_primes(VALUE self, VALUE start, VALUE stop) {
36
+ return ULL2NUM(primesieve_count_primes(NUM2ULL(start), NUM2ULL(stop)));
37
+ }
38
+
39
+ static VALUE count_twins(VALUE self, VALUE start, VALUE stop) {
40
+ return ULL2NUM(primesieve_count_twins(NUM2ULL(start), NUM2ULL(stop)));
41
+ }
42
+
43
+ static VALUE count_triplets(VALUE self, VALUE start, VALUE stop) {
44
+ return ULL2NUM(primesieve_count_triplets(NUM2ULL(start), NUM2ULL(stop)));
45
+ }
46
+
47
+ static VALUE count_quadruplets(VALUE self, VALUE start, VALUE stop) {
48
+ return ULL2NUM(primesieve_count_quadruplets(NUM2ULL(start), NUM2ULL(stop)));
49
+ }
50
+
51
+ static VALUE count_quintuplets(VALUE self, VALUE start, VALUE stop) {
52
+ return ULL2NUM(primesieve_count_quintuplets(NUM2ULL(start), NUM2ULL(stop)));
53
+ }
54
+
55
+ static VALUE count_sextuplets(VALUE self, VALUE start, VALUE stop) {
56
+ return ULL2NUM(primesieve_count_sextuplets(NUM2ULL(start), NUM2ULL(stop)));
57
+ }
58
+
59
+ static VALUE parallel_count_primes(VALUE self, VALUE start, VALUE stop) {
60
+ return ULL2NUM(primesieve_parallel_count_primes(NUM2ULL(start), NUM2ULL(stop)));
61
+ }
62
+
63
+ static VALUE parallel_count_twins(VALUE self, VALUE start, VALUE stop) {
64
+ return ULL2NUM(primesieve_parallel_count_twins(NUM2ULL(start), NUM2ULL(stop)));
65
+ }
66
+
67
+ static VALUE parallel_count_triplets(VALUE self, VALUE start, VALUE stop) {
68
+ return ULL2NUM(primesieve_parallel_count_triplets(NUM2ULL(start), NUM2ULL(stop)));
69
+ }
70
+
71
+ static VALUE parallel_count_quadruplets(VALUE self, VALUE start, VALUE stop) {
72
+ return ULL2NUM(primesieve_parallel_count_quadruplets(NUM2ULL(start), NUM2ULL(stop)));
73
+ }
74
+
75
+ static VALUE parallel_count_quintuplets(VALUE self, VALUE start, VALUE stop) {
76
+ return ULL2NUM(primesieve_parallel_count_quintuplets(NUM2ULL(start), NUM2ULL(stop)));
77
+ }
78
+
79
+ static VALUE parallel_count_sextuplets(VALUE self, VALUE start, VALUE stop) {
80
+ return ULL2NUM(primesieve_parallel_count_sextuplets(NUM2ULL(start), NUM2ULL(stop)));
81
+ }
82
+
83
+ static VALUE print_primes(VALUE self, VALUE start, VALUE stop) {
84
+ primesieve_print_primes(NUM2ULL(start), NUM2ULL(stop));
85
+ return Qnil;
86
+ }
87
+
88
+ static VALUE print_twins(VALUE self, VALUE start, VALUE stop) {
89
+ primesieve_print_twins(NUM2ULL(start), NUM2ULL(stop));
90
+ return Qnil;
91
+ }
92
+
93
+ static VALUE print_triplets(VALUE self, VALUE start, VALUE stop) {
94
+ primesieve_print_triplets(NUM2ULL(start), NUM2ULL(stop));
95
+ return Qnil;
96
+ }
97
+
98
+ static VALUE print_quadruplets(VALUE self, VALUE start, VALUE stop) {
99
+ primesieve_print_quadruplets(NUM2ULL(start), NUM2ULL(stop));
100
+ return Qnil;
101
+ }
102
+
103
+ static VALUE print_quintuplets(VALUE self, VALUE start, VALUE stop) {
104
+ primesieve_print_quintuplets(NUM2ULL(start), NUM2ULL(stop));
105
+ return Qnil;
106
+ }
107
+
108
+ static VALUE print_sextuplets(VALUE self, VALUE start, VALUE stop) {
109
+ primesieve_print_sextuplets(NUM2ULL(start), NUM2ULL(stop));
110
+ return Qnil;
111
+ }
112
+
113
+ static void callback_fn(uint64_t prime) {
114
+ rb_yield(ULL2NUM(prime));
115
+ return;
116
+ }
117
+
118
+ static VALUE callback_primes(VALUE self, VALUE start, VALUE stop) {
119
+ if (!rb_block_given_p())
120
+ rb_raise(rb_eArgError, "Expected block");
121
+ primesieve_callback_primes(NUM2ULL(start), NUM2ULL(stop), callback_fn);
122
+ return Qnil;
123
+ }
124
+
125
+ static void parallel_callback_fn(uint64_t prime, int thread_id) {
126
+ rb_yield_values(2, ULL2NUM(prime), INT2NUM(thread_id));
127
+ return;
128
+ }
129
+
130
+ static VALUE parallel_callback_primes(VALUE self, VALUE start, VALUE stop) {
131
+ if (!rb_block_given_p())
132
+ rb_raise(rb_eArgError, "Expected block");
133
+ primesieve_parallel_callback_primes(NUM2ULL(start), NUM2ULL(stop), parallel_callback_fn);
134
+ return Qnil;
135
+ }
136
+
137
+ static VALUE get_sieve_size(VALUE self) {
138
+ return INT2NUM(primesieve_get_sieve_size());
139
+ }
140
+
141
+ static VALUE get_num_threads(VALUE self) {
142
+ return INT2NUM(primesieve_get_num_threads());
143
+ }
144
+
145
+ static VALUE get_max_stop(VALUE self) {
146
+ return ULL2NUM(primesieve_get_max_stop());
147
+ }
148
+
149
+ static VALUE set_sieve_size(VALUE self, VALUE sieve_size) {
150
+ primesieve_set_sieve_size(NUM2INT(sieve_size));
151
+ return Qnil;
152
+ }
153
+
154
+ static VALUE set_num_threads(VALUE self, VALUE num_threads) {
155
+ primesieve_set_num_threads(NUM2INT(num_threads));
156
+ return Qnil;
157
+ }
158
+
159
+ static VALUE test(VALUE self) {
160
+ return INT2NUM(primesieve_test());
161
+ }
162
+
163
+ void Init_primesieve() {
164
+ mPrimesieve = rb_define_module("Primesieve");
165
+
166
+ rb_define_module_function(mPrimesieve, "generate_primes", generate_primes, 2);
167
+ rb_define_module_function(mPrimesieve, "generate_n_primes", generate_n_primes, 2);
168
+ rb_define_module_function(mPrimesieve, "nth_prime", nth_prime, 2);
169
+ rb_define_module_function(mPrimesieve, "parallel_nth_prime", parallel_nth_prime, 2);
170
+ rb_define_module_function(mPrimesieve, "count_primes", count_primes, 2);
171
+ rb_define_module_function(mPrimesieve, "count_twins", count_twins, 2);
172
+ rb_define_module_function(mPrimesieve, "count_triplets", count_triplets, 2);
173
+ rb_define_module_function(mPrimesieve, "count_quadruplets", count_quadruplets, 2);
174
+ rb_define_module_function(mPrimesieve, "count_quintuplets", count_quintuplets, 2);
175
+ rb_define_module_function(mPrimesieve, "count_sextuplets", count_sextuplets, 2);
176
+ rb_define_module_function(mPrimesieve, "parallel_count_primes", parallel_count_primes, 2);
177
+ rb_define_module_function(mPrimesieve, "parallel_count_twins", parallel_count_twins, 2);
178
+ rb_define_module_function(mPrimesieve, "parallel_count_triplets", parallel_count_triplets, 2);
179
+ rb_define_module_function(mPrimesieve, "parallel_count_quadruplets", parallel_count_quadruplets, 2);
180
+ rb_define_module_function(mPrimesieve, "parallel_count_quintuplets", parallel_count_quintuplets, 2);
181
+ rb_define_module_function(mPrimesieve, "parallel_count_sextuplets", parallel_count_sextuplets, 2);
182
+ rb_define_module_function(mPrimesieve, "print_primes", print_primes, 2);
183
+ rb_define_module_function(mPrimesieve, "print_twins", print_twins, 2);
184
+ rb_define_module_function(mPrimesieve, "print_triplets", print_triplets, 2);
185
+ rb_define_module_function(mPrimesieve, "print_quadruplets", print_quadruplets, 2);
186
+ rb_define_module_function(mPrimesieve, "print_quintuplets", print_quintuplets, 2);
187
+ rb_define_module_function(mPrimesieve, "print_sextuplets", print_sextuplets, 2);
188
+ rb_define_module_function(mPrimesieve, "callback_primes", callback_primes, 2);
189
+ rb_define_module_function(mPrimesieve, "parallel_callback_primes", parallel_callback_primes, 2);
190
+ rb_define_module_function(mPrimesieve, "get_sieve_size", get_sieve_size, 0);
191
+ rb_define_module_function(mPrimesieve, "get_num_threads", get_num_threads, 0);
192
+ rb_define_module_function(mPrimesieve, "get_max_stop", get_max_stop, 0);
193
+ rb_define_module_function(mPrimesieve, "set_sieve_size", set_sieve_size, 1);
194
+ rb_define_module_function(mPrimesieve, "set_num_threads", set_num_threads, 1);
195
+ rb_define_module_function(mPrimesieve, "test", test, 0);
196
+ }
@@ -0,0 +1,9 @@
1
+ #ifndef PRIMESIEVE_RUBY
2
+ #define PRIMESIEVE_RUBY
3
+
4
+ #include <ruby.h>
5
+ #include <primesieve.h>
6
+
7
+ extern VALUE mPrimesieve;
8
+
9
+ #endif
data/lib/primesieve.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'primesieve/primesieve'
2
+
3
+ module Primesieve
4
+ VERSION = '1.0.0'
5
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: primesieve
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Robert Looby
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-07-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A wrapper for the primesieve C prime number generator
14
+ email: robertjlooby@gmail.com
15
+ executables: []
16
+ extensions:
17
+ - ext/primesieve/extconf.rb
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ext/primesieve/extconf.rb
21
+ - ext/primesieve/primesieve-ruby.c
22
+ - ext/primesieve/primesieve-ruby.h
23
+ - lib/primesieve.rb
24
+ homepage: https://github.com/robertjlooby/primesieve-ruby
25
+ licenses:
26
+ - MIT
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 2.4.4
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: A wrapper for the primesieve lib
48
+ test_files: []