schleyfox-peach 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/peach.rb +45 -2
- metadata +2 -2
data/lib/peach.rb
CHANGED
@@ -1,10 +1,53 @@
|
|
1
1
|
module Peach
|
2
2
|
def peach(n = nil, &b)
|
3
|
-
|
3
|
+
return [] if n == 0 or size == 0
|
4
|
+
|
5
|
+
result = Array.new(size)
|
6
|
+
|
7
|
+
n ||= $peach_default_threads || size
|
8
|
+
div = (size/n).ceil
|
9
|
+
|
10
|
+
return [] if div == 0
|
11
|
+
|
12
|
+
threads = []
|
13
|
+
max = size - 1
|
14
|
+
offset = 0
|
15
|
+
for i in (0..n-1)
|
16
|
+
threads << Thread.new(offset - div, offset > max ? max : offset) do |lower, upper|
|
17
|
+
for j in lower..upper
|
18
|
+
yield(slice(j))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
offset += div
|
22
|
+
end
|
23
|
+
threads.each { |t| t.join }
|
24
|
+
self
|
4
25
|
end
|
5
26
|
|
6
27
|
def pmap(n = nil, &b)
|
7
|
-
|
28
|
+
return [] if n == 0
|
29
|
+
|
30
|
+
n ||= $peach_default_threads || size
|
31
|
+
div = (size/n).ceil
|
32
|
+
|
33
|
+
return [] if div == 0
|
34
|
+
|
35
|
+
result = Array.new(size)
|
36
|
+
|
37
|
+
threads = []
|
38
|
+
max = size - 1
|
39
|
+
offset = div
|
40
|
+
for i in (0..n-1)
|
41
|
+
threads << Thread.new(offset - div, offset > max ? max : offset) do |lower, upper|
|
42
|
+
for j in lower..upper
|
43
|
+
result[j] = yield(slice(j))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
offset += div
|
47
|
+
end
|
48
|
+
threads.each { |t| t.join }
|
49
|
+
|
50
|
+
result
|
8
51
|
end
|
9
52
|
|
10
53
|
def pselect(n = nil, &b)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schleyfox-peach
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.3"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Hughes
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-07-14 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|