prime_iterator 1.0.0 → 1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/prime_iterator.rb +31 -11
- metadata +2 -2
data/lib/prime_iterator.rb
CHANGED
@@ -2,25 +2,45 @@
|
|
2
2
|
# Provides API to get next and previous prime number
|
3
3
|
#
|
4
4
|
# USAGE:
|
5
|
-
# iterator = PrimeIterator.new
|
6
|
-
# iterator.next
|
7
|
-
# iterator.previous
|
8
|
-
# iterator.reset
|
9
|
-
# iterator.batch_size=
|
5
|
+
# iterator = PrimeIterator.new <starting_prime>
|
6
|
+
# iterator.next # get next prime number, starting from <starting_prime>; defaults to 2 if <starting_prime> is not given
|
7
|
+
# iterator.previous # get previous prime number, or nil if previous is called on prime number 2
|
8
|
+
# iterator.reset # resets, next will start at <starting_prime>
|
9
|
+
# iterator.batch_size= # sets the number of prime numbers gotten per fetch (which occurs when previous is called at top of list or next is called at end of list)
|
10
|
+
# iterator.starting_prime= # sets the starting prime. Must call PrimeIterator.reset to take effect.
|
11
|
+
#
|
10
12
|
#
|
11
13
|
require 'prime_finder'
|
12
14
|
|
13
15
|
class PrimeIterator
|
14
16
|
|
15
|
-
|
17
|
+
DEFAULT_LOWER_BOUND = 2 # 2 is first prime number
|
18
|
+
DEFAULT_BATCH_SIZE = 10
|
19
|
+
|
20
|
+
attr_accessor :batch_size, :starting_prime
|
16
21
|
|
17
22
|
#
|
18
23
|
# Init
|
19
24
|
#
|
20
|
-
def initialize
|
21
|
-
|
22
|
-
@
|
23
|
-
|
25
|
+
def initialize *args
|
26
|
+
|
27
|
+
@starting_prime = DEFAULT_LOWER_BOUND
|
28
|
+
if args.size > 1
|
29
|
+
raise "Invalid number of parameter. Specify a starting prime number or do not specify to start at 2."
|
30
|
+
elsif args.size == 1
|
31
|
+
@starting_prime = args[0]
|
32
|
+
end
|
33
|
+
|
34
|
+
# is given lower bound a valid prime number?
|
35
|
+
finder = PrimeFinder.new
|
36
|
+
prime_arr = finder.find_primes @starting_prime, @starting_prime
|
37
|
+
if prime_arr.size==0
|
38
|
+
raise "#{@starting_prime} is an invalid starting prime number."
|
39
|
+
end
|
40
|
+
|
41
|
+
@batch_size = DEFAULT_BATCH_SIZE
|
42
|
+
@current_lower_bound = @starting_prime
|
43
|
+
@current_upper_bound = @starting_prime
|
24
44
|
@current_prime_list = Array.new
|
25
45
|
@current_prime_list_idx = -1
|
26
46
|
end
|
@@ -59,7 +79,7 @@ class PrimeIterator
|
|
59
79
|
# Reset
|
60
80
|
#
|
61
81
|
def reset
|
62
|
-
initialize
|
82
|
+
initialize @starting_prime
|
63
83
|
end
|
64
84
|
|
65
85
|
private #####
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prime_iterator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.1'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-06-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: prime_finder
|