prime_iterator 1.0.0 → 1.1
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.
- 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
|