enumerable_lz 0.1.3 → 0.1.4

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
@@ -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