enumerable_lz 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -6,7 +6,11 @@
6
6
 
7
7
  * Improve performance (except for MacRuby)
8
8
 
9
- == 0.1.2 / 2011-05-01
9
+ == 0.1.2, 0.1.3 / 2011-05-01
10
10
 
11
11
  * Improve performance more
12
12
 
13
+ == 0.1.4 / 2011-05-07
14
+
15
+ * Improve performance much more
16
+
data/README.md CHANGED
@@ -51,10 +51,10 @@ These expanded methods are inplemented with fundamental filter and transformatio
51
51
 
52
52
  ## Supported Rubies
53
53
 
54
- * Ruby 1.9.x (testing 1.9.2-p0, 1.9.2 p-136)
55
- * Ruby 1.8.7 (testing 1.8.7-p330)
56
- * JRuby 1.5.x (testing 1.5.6)
57
- * MacRuby 0.8
54
+ * Ruby 1.9.x (testing 1.9.2 p-180)
55
+ * Ruby 1.8.7 (testing 1.8.7-p334)
56
+ * JRuby (testing 1.5.6, 1.6.0)
57
+ * MacRuby (testing 0.9)
58
58
 
59
59
  ## Installation
60
60
 
@@ -16,9 +16,13 @@ module Enumerable
16
16
  @init_block = init_block unless init_block.nil?
17
17
  super() do |y|
18
18
  @init_block.call unless @init_block.nil?
19
- compiled_filter = (@filter||[Proc.new{true}]).inject do |r,f|
20
- Proc.new{|el| r===el && f===el}
21
- end
19
+ compiled_filter = @filter.nil? ? Proc.new{true} : lambda{|f|
20
+ break f[0] if f.size==1
21
+ codes = f.size.times.map do |idx|
22
+ "f[#{idx}]===el"
23
+ end
24
+ eval "Proc.new{|el|"+codes.join(" && ")+"}"
25
+ }.call(@filter)
22
26
  catch :do_break do
23
27
  @org_enum.each do |el|
24
28
  y.yield el if compiled_filter===el
@@ -20,9 +20,16 @@ module Enumerable
20
20
  def each &block
21
21
  return self unless block_given?
22
22
  @init_block.call unless @init_block.nil?
23
- compiled_filter = (@filter||[Proc.new{true}]).inject do |r,f|
24
- Proc.new{|el| r[el] && f[el]}
25
- end
23
+ # compiled_filter = (@filter||[Proc.new{true}]).inject do |r,f|
24
+ # Proc.new{|el| r[el] && f[el]}
25
+ # end
26
+ compiled_filter = @filter.nil? ? Proc.new{true} : lambda{|f|
27
+ break f[0] if f.size==1
28
+ codes = f.size.times.map do |idx|
29
+ "f[#{idx}][el]"
30
+ end
31
+ eval "Proc.new{|el|"+codes.join(" && ")+"}"
32
+ }.call(@filter)
26
33
  catch :do_break do
27
34
  @org_enum.each do |el|
28
35
  block.call(el) if compiled_filter[el]
@@ -64,9 +64,14 @@ module Enumerable
64
64
  end
65
65
  end
66
66
  def compile_filter
67
- @filter.inject do |r,f|
68
- Proc.new{|el| r===el && f===el}
69
- end
67
+ return Proc.new{true} if @filter.nil?
68
+ return @filter[0] if @filter.size==1
69
+ lambda{|f|
70
+ codes = f.size.times.map do |idx|
71
+ "f[#{idx}]===el"
72
+ end
73
+ eval "Proc.new{|el|"+codes.join(" && ")+"}"
74
+ }.call(@filter)
70
75
  end
71
76
  end
72
77
  end
@@ -35,9 +35,13 @@ module Enumerable
35
35
  private
36
36
  def compile_transformer
37
37
  return Proc.new{|a|a} if @transformer.nil? || @transformer.size==0
38
- @transformer.inject do |r,f|
39
- Proc.new{|el|f[r[el]]}
40
- end
38
+ return @transformer[0] if @transformer.size==1
39
+ lambda{|t|
40
+ codes = t.size.times.inject "el" do |r,idx|
41
+ "t[#{idx}][#{r}]"
42
+ end
43
+ eval "Proc.new{|el|"+codes+"}"
44
+ }.call(@transformer)
41
45
  end
42
46
  end
43
47
  end
@@ -38,9 +38,13 @@ module Enumerable
38
38
  private
39
39
  def compile_transformer
40
40
  return Proc.new{|a|a} if @transformer.nil? || @transformer.size==0
41
- @transformer.inject do |r,f|
42
- Proc.new{|el|f[r[el]]}
43
- end
41
+ return @transformer[0] if @transformer.size==1
42
+ lambda{|t|
43
+ codes = t.size.times.inject "el" do |r,idx|
44
+ "t[#{idx}][#{r}]"
45
+ end
46
+ eval "Proc.new{|el|"+codes+"}"
47
+ }.call(@transformer)
44
48
  end
45
49
  end
46
50
  end
@@ -42,6 +42,14 @@ module Enumerable
42
42
  @transformer.inject do |r,f|
43
43
  Proc.new{|el|f[r[el]]}
44
44
  end
45
+ ### MacRuby has a Problem of Nesting Proc Definition
46
+ # return @transformer[0] if @transformer.size==1
47
+ # lambda{|t|
48
+ # codes = t.size.times.inject "el" do |r,idx|
49
+ # "t[#{idx}][#{r}]"
50
+ # end
51
+ # eval "Proc.new{|el|"+codes+"}"
52
+ # }.call(@transformer)
45
53
  end
46
54
  end
47
55
  end
data/lib/enumerable_lz.rb CHANGED
@@ -13,6 +13,6 @@ end
13
13
 
14
14
  module Enumerable
15
15
  module EnumerableLz
16
- VERSION = "0.1.3"
16
+ VERSION = "0.1.4"
17
17
  end
18
18
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: enumerable_lz
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.3
5
+ version: 0.1.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - antimon2
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-01 00:00:00 +09:00
13
+ date: 2011-05-07 00:00:00 +09:00
14
14
  default_executable:
15
15
  dependencies: []
16
16