threadlimiter 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ 0.1.2 (06-10-2008)
2
+
3
+ * Introduced ThreadLimiter.handle_clusters, which is reused by
4
+ ForkAndReturn.
5
+
1
6
  0.1.1 (27-07-2008)
2
7
 
3
8
  * Fixed the clustering of empty enumerables.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -28,29 +28,7 @@ module Enumerable
28
28
  if number_of_clusters <= 0
29
29
  threaded_collect(number_of_clusters, &block)
30
30
  else
31
- clusters = [] # One cluster per thread.
32
- last_pos = -1
33
- res = []
34
-
35
- self.each do |object|
36
- last_pos += 1
37
-
38
- (clusters[last_pos%number_of_clusters] ||= []) << object
39
- end
40
-
41
- clusters.threaded_collect(-1) do |cluster|
42
- cluster.collect do |object|
43
- if block.arity > 1 and object.kind_of?(Enumerable)
44
- yield(*object.to_a)
45
- else
46
- yield(object)
47
- end
48
- end + (cluster.length == clusters[0].length ? [] : [nil]) # Add padding nil, in order to be able to transpose
49
- end.transpose.each do |array|
50
- res.concat(array)
51
- end
52
-
53
- res[0..last_pos] # Remove padding nil.
31
+ ThreadLimiter.handle_clusters(self, number_of_clusters, :threaded_collect, &block)
54
32
  end
55
33
  end
56
34
 
@@ -49,4 +49,33 @@ class ThreadLimiter
49
49
  end
50
50
  end
51
51
  end
52
+
53
+ def self.handle_clusters(enumeration, number_of_clusters, method_name, &block)
54
+ clusters = [] # One cluster per fork.
55
+ last_pos = -1
56
+ res = []
57
+
58
+ enumeration.each do |object|
59
+ last_pos += 1
60
+
61
+ (clusters[last_pos%number_of_clusters] ||= []) << object
62
+ end
63
+
64
+ clusters.__send__(method_name, -1) do |cluster|
65
+ cluster.collect do |object|
66
+ if block.arity > 1 and object.kind_of?(Enumerable)
67
+ yield(*object.to_a)
68
+ else
69
+ yield(object)
70
+ end
71
+ end
72
+ end.collect do |cluster|
73
+ cluster + (cluster.length == clusters[0].length ? [] : [nil]) # Add padding nil, in order to be able to transpose
74
+ end.transpose.each do |array|
75
+ res.concat(array)
76
+ end
77
+
78
+ res[0..last_pos] # Remove padding nil.
79
+ end
80
+
52
81
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: threadlimiter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Veenstra
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-07-27 00:00:00 +02:00
12
+ date: 2008-10-06 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -39,7 +39,7 @@ rdoc_options:
39
39
  - VERSION
40
40
  - CHANGELOG
41
41
  - --title
42
- - threadlimiter (0.1.1)
42
+ - threadlimiter (0.1.2)
43
43
  - --main
44
44
  - README
45
45
  require_paths: