threadlimiter 0.1.1 → 0.1.2

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/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: