cartesian 0.6.0 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/History.txt +6 -0
  2. data/Manifest.txt +13 -35
  3. data/Rakefile +19 -3
  4. data/{lib → etc}/recursive.rb +0 -0
  5. data/index.html +7 -0
  6. data/lib/cartesian.rb +1 -1
  7. data/script/txt2html +4 -2
  8. data/website/doc/Array.html +172 -0
  9. data/website/doc/Cartesian.html +638 -0
  10. data/website/doc/CartesianIterator.html +672 -0
  11. data/website/doc/Enumerable.html +158 -0
  12. data/website/doc/GridSearch.html +292 -0
  13. data/website/doc/Iterable.html +306 -0
  14. data/website/doc/README_rdoc.html +220 -0
  15. data/website/doc/created.rid +4 -4
  16. data/website/doc/lib/cartesian_iterator_rb.html +52 -0
  17. data/website/doc/lib/cartesian_rb.html +56 -0
  18. data/website/doc/lib/grid_search_rb.html +52 -0
  19. data/website/doc/rdoc.css +706 -0
  20. data/website/index.html +3 -3
  21. data/website/template.html.erb +1 -1
  22. metadata +15 -37
  23. data/website/doc/classes/Array.html +0 -128
  24. data/website/doc/classes/Cartesian.html +0 -398
  25. data/website/doc/classes/Cartesian.src/M000020.html +0 -18
  26. data/website/doc/classes/Cartesian.src/M000021.html +0 -18
  27. data/website/doc/classes/Cartesian.src/M000022.html +0 -18
  28. data/website/doc/classes/Cartesian.src/M000023.html +0 -23
  29. data/website/doc/classes/Cartesian.src/M000026.html +0 -23
  30. data/website/doc/classes/Cartesian.src/M000027.html +0 -30
  31. data/website/doc/classes/CartesianIterator.html +0 -326
  32. data/website/doc/classes/CartesianIterator.src/M000001.html +0 -21
  33. data/website/doc/classes/CartesianIterator.src/M000002.html +0 -18
  34. data/website/doc/classes/CartesianIterator.src/M000003.html +0 -21
  35. data/website/doc/classes/CartesianIterator.src/M000005.html +0 -20
  36. data/website/doc/classes/CartesianIterator.src/M000008.html +0 -20
  37. data/website/doc/classes/CartesianIterator.src/M000009.html +0 -19
  38. data/website/doc/classes/CartesianIterator.src/M000012.html +0 -19
  39. data/website/doc/classes/CartesianIterator.src/M000013.html +0 -39
  40. data/website/doc/classes/Enumerable.html +0 -112
  41. data/website/doc/classes/GridSearch.html +0 -160
  42. data/website/doc/classes/GridSearch.src/M000014.html +0 -18
  43. data/website/doc/classes/GridSearch.src/M000015.html +0 -18
  44. data/website/doc/classes/Iterable.html +0 -176
  45. data/website/doc/classes/Iterable.src/M000016.html +0 -19
  46. data/website/doc/classes/Iterable.src/M000017.html +0 -19
  47. data/website/doc/classes/Iterable.src/M000018.html +0 -18
  48. data/website/doc/classes/Iterable.src/M000019.html +0 -18
  49. data/website/doc/classes/Range.html +0 -118
  50. data/website/doc/files/cartesian_iterator_rb.html +0 -101
  51. data/website/doc/files/cartesian_rb.html +0 -108
  52. data/website/doc/files/grid_search_rb.html +0 -101
  53. data/website/doc/fr_class_index.html +0 -33
  54. data/website/doc/fr_file_index.html +0 -29
  55. data/website/doc/fr_method_index.html +0 -54
  56. data/website/doc/rdoc-style.css +0 -208
@@ -1,3 +1,9 @@
1
+ === 0.6.2 2011-01-07
2
+
3
+ * 1 minor enhancement:
4
+ * fix: updated Manifest.txt and thus the gem package content
5
+ * the offline website is now a faithful replica of the online one
6
+
1
7
  === 0.6.0 2011-01-07
2
8
 
3
9
  * 1 major enhancement:
@@ -6,12 +6,13 @@ Rakefile
6
6
  Wishlist.txt
7
7
  config/hoe.rb
8
8
  config/requirements.rb
9
+ etc/recursive.rb
10
+ index.html
9
11
  lib/cartesian.rb
10
12
  lib/cartesian/grid_search.rb
11
13
  lib/cartesian/version.rb
12
14
  lib/cartesian_iterator.rb
13
15
  lib/grid_search.rb
14
- lib/recursive.rb
15
16
  script/console
16
17
  script/destroy
17
18
  script/generate
@@ -24,42 +25,19 @@ test/test_extensions.rb
24
25
  test/test_grid_search.rb
25
26
  test/test_helper.rb
26
27
  test/test_suite.rb
27
- website/doc/classes/Array.html
28
- website/doc/classes/Cartesian.html
29
- website/doc/classes/Cartesian.src/M000020.html
30
- website/doc/classes/Cartesian.src/M000021.html
31
- website/doc/classes/Cartesian.src/M000022.html
32
- website/doc/classes/Cartesian.src/M000023.html
33
- website/doc/classes/Cartesian.src/M000026.html
34
- website/doc/classes/Cartesian.src/M000027.html
35
- website/doc/classes/CartesianIterator.html
36
- website/doc/classes/CartesianIterator.src/M000001.html
37
- website/doc/classes/CartesianIterator.src/M000002.html
38
- website/doc/classes/CartesianIterator.src/M000003.html
39
- website/doc/classes/CartesianIterator.src/M000005.html
40
- website/doc/classes/CartesianIterator.src/M000008.html
41
- website/doc/classes/CartesianIterator.src/M000009.html
42
- website/doc/classes/CartesianIterator.src/M000012.html
43
- website/doc/classes/CartesianIterator.src/M000013.html
44
- website/doc/classes/Enumerable.html
45
- website/doc/classes/GridSearch.html
46
- website/doc/classes/GridSearch.src/M000014.html
47
- website/doc/classes/GridSearch.src/M000015.html
48
- website/doc/classes/Iterable.html
49
- website/doc/classes/Iterable.src/M000016.html
50
- website/doc/classes/Iterable.src/M000017.html
51
- website/doc/classes/Iterable.src/M000018.html
52
- website/doc/classes/Iterable.src/M000019.html
53
- website/doc/classes/Range.html
28
+ website/doc/Array.html
29
+ website/doc/Cartesian.html
30
+ website/doc/CartesianIterator.html
31
+ website/doc/Enumerable.html
32
+ website/doc/GridSearch.html
33
+ website/doc/Iterable.html
34
+ website/doc/README_rdoc.html
54
35
  website/doc/created.rid
55
- website/doc/files/cartesian_iterator_rb.html
56
- website/doc/files/cartesian_rb.html
57
- website/doc/files/grid_search_rb.html
58
- website/doc/fr_class_index.html
59
- website/doc/fr_file_index.html
60
- website/doc/fr_method_index.html
61
36
  website/doc/index.html
62
- website/doc/rdoc-style.css
37
+ website/doc/lib/cartesian_iterator_rb.html
38
+ website/doc/lib/cartesian_rb.html
39
+ website/doc/lib/grid_search_rb.html
40
+ website/doc/rdoc.css
63
41
  website/index.html
64
42
  website/index.txt
65
43
  website/javascripts/rounded_corners_lite.inc.js
data/Rakefile CHANGED
@@ -25,10 +25,26 @@ Dir['tasks/**/*.rake'].each { |t| load t }
25
25
  # remove_task :default
26
26
  # task :default => [:spec, :features]
27
27
 
28
- task :render_website do |t|
28
+ task :chdir do
29
29
  Dir.chdir File.dirname(File.expand_path(__FILE__))
30
- system %q{ script/txt2html website/index.txt website/template.html.erb > website/index.html }
30
+ end
31
+
32
+ task :render_docs => [:chdir] do
33
+ system %q{ rm -rf doc/ }
31
34
  system %q{ rdoc README.rdoc lib/*.rb }
32
- system %q{ rm -rf website/doc; mv doc website }
35
+ end
36
+
37
+ task :render_website => [:chdir, :render_docs] do |t|
38
+ system %q{ script/txt2html website/index.txt website/template.html.erb > website/index.html }
39
+ system %q{ rm -rf website/doc; cp -R doc website }
40
+ end
41
+
42
+ task :pre_release => [:manifest, :render_website] do
43
+ unless `git diff Manifest.txt`.empty?
44
+ puts
45
+ puts " Manifest.txt was re-generated and there were changes."
46
+ puts " Use 'git diff Manifest.txt' to inspect them."
47
+ puts
48
+ end
33
49
  end
34
50
 
File without changes
@@ -0,0 +1,7 @@
1
+ <html>
2
+ <meta http-equiv="Refresh" content="0; url=website/index.html">
3
+ <body>
4
+ Redirecting to the <a href="website/index.html">homepage</a>.
5
+ </body>
6
+ </html>
7
+
@@ -39,7 +39,7 @@ module Cartesian
39
39
  # Unfortunately, as of now, the version data must be replicated in ../cartesian.rb,
40
40
  # due to a mix of newgem versions, each requiring a different one. Not DRY :P
41
41
  #
42
- VERSION = "0.6.0"
42
+ VERSION = "0.6.2"
43
43
 
44
44
  # Produces the cartesian product of self and other.
45
45
  # The result is an array of pairs (i.e. two-element arrays).
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  GEM_NAME = 'cartesian' # what ppl will type to install your gem
4
- RUBYFORGE_PROJECT = 'cartesian'
4
+ GITHUB_PROJECT = 'cartesian'
5
5
 
6
6
  require 'rubygems'
7
7
  begin
@@ -18,11 +18,13 @@ require 'erb'
18
18
  require File.dirname(File.expand_path(__FILE__)) + "/../lib/#{GEM_NAME}.rb"
19
19
 
20
20
  version = Cartesian::VERSION
21
- download = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
21
+ download = "http://github.com/adrianomitre/#{GITHUB_PROJECT}"
22
22
 
23
+ =begin
23
24
  def rubyforge_project_id
24
25
  RubyForge.new.autoconfig["group_ids"][RUBYFORGE_PROJECT]
25
26
  end
27
+ =end
26
28
 
27
29
  class Fixnum
28
30
  def ordinal
@@ -0,0 +1,172 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
7
+
8
+ <title>Class: Array</title>
9
+
10
+ <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
11
+
12
+ <script src="./js/jquery.js" type="text/javascript"
13
+ charset="utf-8"></script>
14
+ <script src="./js/thickbox-compressed.js" type="text/javascript"
15
+ charset="utf-8"></script>
16
+ <script src="./js/quicksearch.js" type="text/javascript"
17
+ charset="utf-8"></script>
18
+ <script src="./js/darkfish.js" type="text/javascript"
19
+ charset="utf-8"></script>
20
+
21
+ </head>
22
+ <body class="class">
23
+
24
+ <div id="metadata">
25
+ <div id="home-metadata">
26
+ <div id="home-section" class="section">
27
+ <h3 class="section-header">
28
+ <a href="./index.html">Home</a>
29
+ <a href="./index.html#classes">Classes</a>
30
+ <a href="./index.html#methods">Methods</a>
31
+ </h3>
32
+ </div>
33
+ </div>
34
+
35
+ <div id="file-metadata">
36
+ <div id="file-list-section" class="section">
37
+ <h3 class="section-header">In Files</h3>
38
+ <div class="section-body">
39
+ <ul>
40
+
41
+ <li><a href="./lib/cartesian_iterator_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
42
+ class="thickbox" title="lib/cartesian_iterator.rb">lib/cartesian_iterator.rb</a></li>
43
+
44
+ <li><a href="./lib/grid_search_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
45
+ class="thickbox" title="lib/grid_search.rb">lib/grid_search.rb</a></li>
46
+
47
+ </ul>
48
+ </div>
49
+ </div>
50
+
51
+
52
+ </div>
53
+
54
+ <div id="class-metadata">
55
+
56
+ <!-- Parent Class -->
57
+
58
+ <div id="parent-class-section" class="section">
59
+ <h3 class="section-header">Parent</h3>
60
+
61
+ <p class="link">Object</p>
62
+
63
+ </div>
64
+
65
+
66
+ <!-- Namespace Contents -->
67
+
68
+
69
+ <!-- Method Quickref -->
70
+
71
+
72
+ <!-- Included Modules -->
73
+
74
+ <div id="includes-section" class="section">
75
+ <h3 class="section-header">Included Modules</h3>
76
+ <ul class="link-list">
77
+
78
+
79
+ <li><a class="include" href="Iterable.html">Iterable</a></li>
80
+
81
+
82
+
83
+ <li><a class="include" href="GridSearch.html">GridSearch</a></li>
84
+
85
+
86
+ </ul>
87
+ </div>
88
+
89
+ </div>
90
+
91
+ <div id="project-metadata">
92
+
93
+
94
+ <div id="fileindex-section" class="section project-section">
95
+ <h3 class="section-header">Files</h3>
96
+ <ul>
97
+
98
+ <li class="file"><a href="./README_rdoc.html">README.rdoc</a></li>
99
+
100
+ </ul>
101
+ </div>
102
+
103
+
104
+ <div id="classindex-section" class="section project-section">
105
+ <h3 class="section-header">Class Index
106
+ <span class="search-toggle"><img src="./images/find.png"
107
+ height="16" width="16" alt="[+]"
108
+ title="show/hide quicksearch" /></span></h3>
109
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
110
+ <fieldset>
111
+ <legend>Quicksearch</legend>
112
+ <input type="text" name="quicksearch" value=""
113
+ class="quicksearch-field" />
114
+ </fieldset>
115
+ </form>
116
+
117
+ <ul class="link-list">
118
+
119
+ <li><a href="./Array.html">Array</a></li>
120
+
121
+ <li><a href="./Cartesian.html">Cartesian</a></li>
122
+
123
+ <li><a href="./CartesianIterator.html">CartesianIterator</a></li>
124
+
125
+ <li><a href="./Enumerable.html">Enumerable</a></li>
126
+
127
+ <li><a href="./GridSearch.html">GridSearch</a></li>
128
+
129
+ <li><a href="./Iterable.html">Iterable</a></li>
130
+
131
+ </ul>
132
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
133
+ </div>
134
+
135
+
136
+ </div>
137
+ </div>
138
+
139
+ <div id="documentation">
140
+ <h1 class="class">Array</h1>
141
+
142
+ <div id="description">
143
+
144
+ </div>
145
+
146
+ <!-- Constants -->
147
+
148
+
149
+ <!-- Attributes -->
150
+
151
+
152
+ <!-- Methods -->
153
+
154
+
155
+ </div>
156
+
157
+
158
+ <div id="rdoc-debugging-section-dump" class="debugging-section">
159
+
160
+ <p>Disabled; run with --debug to generate this.</p>
161
+
162
+ </div>
163
+
164
+ <div id="validator-badges">
165
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
166
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
167
+ Rdoc Generator</a> 1.1.6</small>.</p>
168
+ </div>
169
+
170
+ </body>
171
+ </html>
172
+
@@ -0,0 +1,638 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
7
+
8
+ <title>Module: Cartesian</title>
9
+
10
+ <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
11
+
12
+ <script src="./js/jquery.js" type="text/javascript"
13
+ charset="utf-8"></script>
14
+ <script src="./js/thickbox-compressed.js" type="text/javascript"
15
+ charset="utf-8"></script>
16
+ <script src="./js/quicksearch.js" type="text/javascript"
17
+ charset="utf-8"></script>
18
+ <script src="./js/darkfish.js" type="text/javascript"
19
+ charset="utf-8"></script>
20
+
21
+ </head>
22
+ <body class="module">
23
+
24
+ <div id="metadata">
25
+ <div id="home-metadata">
26
+ <div id="home-section" class="section">
27
+ <h3 class="section-header">
28
+ <a href="./index.html">Home</a>
29
+ <a href="./index.html#classes">Classes</a>
30
+ <a href="./index.html#methods">Methods</a>
31
+ </h3>
32
+ </div>
33
+ </div>
34
+
35
+ <div id="file-metadata">
36
+ <div id="file-list-section" class="section">
37
+ <h3 class="section-header">In Files</h3>
38
+ <div class="section-body">
39
+ <ul>
40
+
41
+ <li><a href="./lib/cartesian_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
42
+ class="thickbox" title="lib/cartesian.rb">lib/cartesian.rb</a></li>
43
+
44
+ </ul>
45
+ </div>
46
+ </div>
47
+
48
+
49
+ </div>
50
+
51
+ <div id="class-metadata">
52
+
53
+ <!-- Parent Class -->
54
+
55
+
56
+ <!-- Namespace Contents -->
57
+
58
+
59
+ <!-- Method Quickref -->
60
+
61
+ <div id="method-list-section" class="section">
62
+ <h3 class="section-header">Methods</h3>
63
+ <ul class="link-list">
64
+
65
+ <li><a href="#method-c-joined_product">::joined_product</a></li>
66
+
67
+ <li><a href="#method-c-product">::product</a></li>
68
+
69
+ <li><a href="#method-i-%2A%2A">#**</a></li>
70
+
71
+ <li><a href="#method-i-cartesian">#cartesian</a></li>
72
+
73
+ <li><a href="#method-i-joined_cartesian">#joined_cartesian</a></li>
74
+
75
+ <li><a href="#method-i-left_product">#left_product</a></li>
76
+
77
+ <li><a href="#method-i-power%21">#power!</a></li>
78
+
79
+ <li><a href="#method-i-right_product">#right_product</a></li>
80
+
81
+ <li><a href="#method-i-x">#x</a></li>
82
+
83
+ </ul>
84
+ </div>
85
+
86
+
87
+ <!-- Included Modules -->
88
+
89
+ </div>
90
+
91
+ <div id="project-metadata">
92
+
93
+
94
+ <div id="fileindex-section" class="section project-section">
95
+ <h3 class="section-header">Files</h3>
96
+ <ul>
97
+
98
+ <li class="file"><a href="./README_rdoc.html">README.rdoc</a></li>
99
+
100
+ </ul>
101
+ </div>
102
+
103
+
104
+ <div id="classindex-section" class="section project-section">
105
+ <h3 class="section-header">Class Index
106
+ <span class="search-toggle"><img src="./images/find.png"
107
+ height="16" width="16" alt="[+]"
108
+ title="show/hide quicksearch" /></span></h3>
109
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
110
+ <fieldset>
111
+ <legend>Quicksearch</legend>
112
+ <input type="text" name="quicksearch" value=""
113
+ class="quicksearch-field" />
114
+ </fieldset>
115
+ </form>
116
+
117
+ <ul class="link-list">
118
+
119
+ <li><a href="./Array.html">Array</a></li>
120
+
121
+ <li><a href="./Cartesian.html">Cartesian</a></li>
122
+
123
+ <li><a href="./CartesianIterator.html">CartesianIterator</a></li>
124
+
125
+ <li><a href="./Enumerable.html">Enumerable</a></li>
126
+
127
+ <li><a href="./GridSearch.html">GridSearch</a></li>
128
+
129
+ <li><a href="./Iterable.html">Iterable</a></li>
130
+
131
+ </ul>
132
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
133
+ </div>
134
+
135
+
136
+ </div>
137
+ </div>
138
+
139
+ <div id="documentation">
140
+ <h1 class="module">Cartesian</h1>
141
+
142
+ <div id="description">
143
+ <p>
144
+ The <a href="Cartesian.html">Cartesian</a> module provide methods for the
145
+ calculation of the cartesian producted between two enumerable objects.
146
+ </p>
147
+ <p>
148
+ It can also be easily mixed in into any enumerable class, i.e. any class
149
+ with <a href="Enumerable.html">Enumerable</a> module mixed in. Notice that
150
+ the names of the methods for mixin are different.
151
+ </p>
152
+ <p>
153
+ Module:
154
+ </p>
155
+ <pre>
156
+ Cartesian::product(foo, bar)
157
+ </pre>
158
+ <p>
159
+ Mixin:
160
+ </p>
161
+ <pre>
162
+ foo.cartesian( bar )
163
+ </pre>
164
+ <p>
165
+ The module is automatically mixed in <a href="Array.html">Array</a> class.
166
+ </p>
167
+ <h2>Author</h2>
168
+ <p>
169
+ Adriano MITRE <adriano.mitre@gmail.com>
170
+ </p>
171
+ <h2>Example</h2>
172
+ <p>
173
+ as module
174
+ </p>
175
+ <pre>
176
+ require 'cartesian'
177
+ foo = [1, 2]
178
+ bar = [&quot;a&quot;, &quot;b&quot;]
179
+ Cartesian::product(foo, bar) #=&gt; [[1, &quot;a&quot;], [1, &quot;b&quot;], [2, &quot;a&quot;], [2, &quot;b&quot;]]
180
+ </pre>
181
+ <p>
182
+ as mixin
183
+ </p>
184
+ <pre>
185
+ require 'cartesian'
186
+ foo = [1, 2]
187
+ bar = [&quot;a&quot;, &quot;b&quot;]
188
+ foo.cartesian(bar) #=&gt; [[1, &quot;a&quot;], [1, &quot;b&quot;], [2, &quot;a&quot;], [2, &quot;b&quot;]]</pre>
189
+
190
+ </div>
191
+
192
+ <!-- Constants -->
193
+
194
+ <div id="constants-list" class="section">
195
+ <h3 class="section-header">Constants</h3>
196
+ <dl>
197
+
198
+ <dt><a name="VERSION">VERSION</a></dt>
199
+
200
+ <dd class="description"><p>
201
+ Unfortunately, as of now, the version data must be replicated in
202
+ ../cartesian.rb, due to a mix of newgem versions, each requiring a
203
+ different one. Not DRY :P
204
+ </p></dd>
205
+
206
+
207
+ </dl>
208
+ </div>
209
+
210
+
211
+ <!-- Attributes -->
212
+
213
+
214
+ <!-- Methods -->
215
+
216
+ <div id="public-class-method-details" class="method-section section">
217
+ <h3 class="section-header">Public Class Methods</h3>
218
+
219
+
220
+ <div id="joined-product-method" class="method-detail ">
221
+ <a name="method-c-joined_product"></a>
222
+
223
+ <div class="method-heading">
224
+
225
+ <span class="method-name">joined_product</span><span
226
+ class="method-args">(first, second)</span>
227
+ <span class="method-click-advice">click to toggle source</span>
228
+
229
+ </div>
230
+
231
+ <div class="method-description">
232
+
233
+ <p>
234
+ Behaves as product, except for the elements are joined.
235
+ </p>
236
+ <pre>
237
+ Cartesian::joined_cartesian( [1,2], %w(A B) ) #=&gt; [&quot;1A&quot;, &quot;1B&quot;, &quot;2A&quot;, &quot;2B&quot;]
238
+ </pre>
239
+ <p>
240
+ or, if mixed in into <a href="Array.html">Array</a>,
241
+ </p>
242
+ <pre>
243
+ [1,2].joined_cartesian %w(A B) #=&gt; [&quot;1A&quot;, &quot;1B&quot;, &quot;2A&quot;, &quot;2B&quot;]</pre>
244
+
245
+
246
+
247
+ <div class="method-source-code"
248
+ id="joined-product-source">
249
+ <pre>
250
+ <span class="ruby-comment cmt"># File lib/cartesian.rb, line 65</span>
251
+ 65: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Cartesian</span>.<span class="ruby-identifier">joined_product</span>(<span class="ruby-identifier">first</span>, <span class="ruby-identifier">second</span>)
252
+ 66: <span class="ruby-identifier">product</span>(<span class="ruby-identifier">first</span>, <span class="ruby-identifier">second</span>).<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">pair</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pair</span>.<span class="ruby-identifier">join</span> }
253
+ 67: <span class="ruby-keyword kw">end</span></pre>
254
+ </div>
255
+
256
+ </div>
257
+
258
+
259
+
260
+
261
+ </div>
262
+
263
+
264
+ <div id="product-method" class="method-detail ">
265
+ <a name="method-c-product"></a>
266
+
267
+ <div class="method-heading">
268
+
269
+ <span class="method-name">product</span><span
270
+ class="method-args">(first, second)</span>
271
+ <span class="method-click-advice">click to toggle source</span>
272
+
273
+ </div>
274
+
275
+ <div class="method-description">
276
+
277
+ <p>
278
+ Produces the cartesian product of self and other. The result is an array of
279
+ pairs (i.e. two-element arrays).
280
+ </p>
281
+ <pre>
282
+ Cartesian::product( [1,2], %w(A B) ) #=&gt; [[1, &quot;A&quot;], [1, &quot;B&quot;], [2, &quot;A&quot;], [2, &quot;B&quot;]]
283
+ </pre>
284
+ <p>
285
+ or, if mixed in into <a href="Array.html">Array</a>,
286
+ </p>
287
+ <pre>
288
+ [1,2].cartesian %w(A B) #=&gt; [[1, &quot;A&quot;], [1, &quot;B&quot;], [2, &quot;A&quot;], [2, &quot;B&quot;]]</pre>
289
+
290
+
291
+
292
+ <div class="method-source-code"
293
+ id="product-source">
294
+ <pre>
295
+ <span class="ruby-comment cmt"># File lib/cartesian.rb, line 53</span>
296
+ 53: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Cartesian</span>.<span class="ruby-identifier">product</span>(<span class="ruby-identifier">first</span>, <span class="ruby-identifier">second</span>)
297
+ 54: <span class="ruby-identifier">first</span>.<span class="ruby-identifier">x</span>(<span class="ruby-identifier">second</span>).<span class="ruby-identifier">to_a</span>
298
+ 55: <span class="ruby-keyword kw">end</span></pre>
299
+ </div>
300
+
301
+ </div>
302
+
303
+
304
+
305
+
306
+ </div>
307
+
308
+
309
+ </div>
310
+
311
+ <div id="public-instance-method-details" class="method-section section">
312
+ <h3 class="section-header">Public Instance Methods</h3>
313
+
314
+
315
+ <div id="--method" class="method-detail ">
316
+ <a name="method-i-%2A%2A"></a>
317
+
318
+ <div class="method-heading">
319
+
320
+ <span class="method-name">**</span><span
321
+ class="method-args">(fixnum)</span>
322
+ <span class="method-click-advice">click to toggle source</span>
323
+
324
+ </div>
325
+
326
+ <div class="method-description">
327
+
328
+ <p>
329
+ Concise way of iterating multi-dimensionally over the same array or range.
330
+ </p>
331
+ <p>
332
+ For instance,
333
+ </p>
334
+ <pre>
335
+ for x,y,z in [0,1]**3
336
+ puts [x, y, z].join(',')
337
+ end
338
+ </pre>
339
+ <p>
340
+ produces the following output
341
+ </p>
342
+ <pre>
343
+ 0,0,0
344
+ 0,0,1
345
+ 0,1,0
346
+ 0,1,1
347
+ 1,0,0
348
+ 1,0,1
349
+ 1,1,0
350
+ 1,1,1
351
+ </pre>
352
+ <p>
353
+ It also works with Range objects.
354
+ </p>
355
+
356
+
357
+
358
+ <div class="method-source-code"
359
+ id="--source">
360
+ <pre>
361
+ <span class="ruby-comment cmt"># File lib/cartesian.rb, line 143</span>
362
+ 143: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">**</span>(<span class="ruby-identifier">fixnum</span>)
363
+ 144: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fixnum</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
364
+ 145: <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;negative power&quot;</span>
365
+ 146: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">fixnum</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
366
+ 147: <span class="ruby-keyword kw">return</span> []
367
+ 148: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">fixnum</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
368
+ 149: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>
369
+ 150: <span class="ruby-keyword kw">else</span>
370
+ 151: <span class="ruby-identifier">iter</span> = <span class="ruby-constant">CartesianIterator</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">self</span>)
371
+ 152: (<span class="ruby-identifier">fixnum</span><span class="ruby-operator">-</span><span class="ruby-value">2</span>).<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span>
372
+ 153: <span class="ruby-identifier">iter</span>.<span class="ruby-identifier">product!</span>(<span class="ruby-keyword kw">self</span>)
373
+ 154: <span class="ruby-keyword kw">end</span>
374
+ 155: <span class="ruby-identifier">iter</span>
375
+ 156: <span class="ruby-keyword kw">end</span>
376
+ 157: <span class="ruby-keyword kw">end</span></pre>
377
+ </div>
378
+
379
+ </div>
380
+
381
+
382
+ <div class="aliases">
383
+ Also aliased as: <a href="Cartesian.html#method-i-power%21">power!</a>
384
+ </div>
385
+
386
+
387
+
388
+ </div>
389
+
390
+
391
+ <div id="cartesian-method" class="method-detail method-alias">
392
+ <a name="method-i-cartesian"></a>
393
+
394
+ <div class="method-heading">
395
+
396
+ <span class="method-name">cartesian</span><span
397
+ class="method-args">(other)</span>
398
+ <span class="method-click-advice">click to toggle source</span>
399
+
400
+ </div>
401
+
402
+ <div class="method-description">
403
+
404
+
405
+
406
+
407
+
408
+ </div>
409
+
410
+
411
+
412
+
413
+ <div class="aliases">
414
+ Alias for: <a href="Cartesian.html#method-i-x">x</a>
415
+ </div>
416
+
417
+ </div>
418
+
419
+
420
+ <div id="joined-cartesian-method" class="method-detail ">
421
+ <a name="method-i-joined_cartesian"></a>
422
+
423
+ <div class="method-heading">
424
+
425
+ <span class="method-name">joined_cartesian</span><span
426
+ class="method-args">(other)</span>
427
+ <span class="method-click-advice">click to toggle source</span>
428
+
429
+ </div>
430
+
431
+ <div class="method-description">
432
+
433
+ <p>
434
+ Cartesian.joined_product for mixin.
435
+ </p>
436
+
437
+
438
+
439
+ <div class="method-source-code"
440
+ id="joined-cartesian-source">
441
+ <pre>
442
+ <span class="ruby-comment cmt"># File lib/cartesian.rb, line 71</span>
443
+ 71: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">joined_cartesian</span>(<span class="ruby-identifier">other</span>)
444
+ 72: <span class="ruby-constant">Cartesian</span>.<span class="ruby-identifier">joined_product</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">other</span>)
445
+ 73: <span class="ruby-keyword kw">end</span></pre>
446
+ </div>
447
+
448
+ </div>
449
+
450
+
451
+
452
+
453
+ </div>
454
+
455
+
456
+ <div id="left-product-method" class="method-detail ">
457
+ <a name="method-i-left_product"></a>
458
+
459
+ <div class="method-heading">
460
+
461
+ <span class="method-name">left_product</span><span
462
+ class="method-args">(other)</span>
463
+ <span class="method-click-advice">click to toggle source</span>
464
+
465
+ </div>
466
+
467
+ <div class="method-description">
468
+
469
+
470
+
471
+
472
+
473
+ <div class="method-source-code"
474
+ id="left-product-source">
475
+ <pre>
476
+ <span class="ruby-comment cmt"># File lib/cartesian.rb, line 112</span>
477
+ 112: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">left_product</span>(<span class="ruby-identifier">other</span>)
478
+ 113: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">other</span>
479
+ 114: <span class="ruby-keyword kw">when</span> <span class="ruby-constant">CartesianIterator</span>
480
+ 115: <span class="ruby-identifier">other</span>.<span class="ruby-identifier">right_product</span>(<span class="ruby-keyword kw">self</span>)
481
+ 116: <span class="ruby-keyword kw">else</span>
482
+ 117: <span class="ruby-constant">CartesianIterator</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">other</span>, <span class="ruby-keyword kw">self</span>)
483
+ 118: <span class="ruby-keyword kw">end</span>
484
+ 119: <span class="ruby-keyword kw">end</span></pre>
485
+ </div>
486
+
487
+ </div>
488
+
489
+
490
+
491
+
492
+ </div>
493
+
494
+
495
+ <div id="power--method" class="method-detail method-alias">
496
+ <a name="method-i-power%21"></a>
497
+
498
+ <div class="method-heading">
499
+
500
+ <span class="method-name">power!</span><span
501
+ class="method-args">(fixnum)</span>
502
+ <span class="method-click-advice">click to toggle source</span>
503
+
504
+ </div>
505
+
506
+ <div class="method-description">
507
+
508
+
509
+
510
+
511
+
512
+ </div>
513
+
514
+
515
+
516
+
517
+ <div class="aliases">
518
+ Alias for: <a href="Cartesian.html#method-i-%2A%2A">**</a>
519
+ </div>
520
+
521
+ </div>
522
+
523
+
524
+ <div id="right-product-method" class="method-detail method-alias">
525
+ <a name="method-i-right_product"></a>
526
+
527
+ <div class="method-heading">
528
+
529
+ <span class="method-name">right_product</span><span
530
+ class="method-args">(other)</span>
531
+ <span class="method-click-advice">click to toggle source</span>
532
+
533
+ </div>
534
+
535
+ <div class="method-description">
536
+
537
+
538
+
539
+
540
+
541
+ </div>
542
+
543
+
544
+
545
+
546
+ <div class="aliases">
547
+ Alias for: <a href="Cartesian.html#method-i-x">x</a>
548
+ </div>
549
+
550
+ </div>
551
+
552
+
553
+ <div id="x-method" class="method-detail ">
554
+ <a name="method-i-x"></a>
555
+
556
+ <div class="method-heading">
557
+
558
+ <span class="method-name">x</span><span
559
+ class="method-args">(other)</span>
560
+ <span class="method-click-advice">click to toggle source</span>
561
+
562
+ </div>
563
+
564
+ <div class="method-description">
565
+
566
+ <p>
567
+ Convenient way of iterating over the elements. Preferable when the
568
+ cartesian product array is not needed, for the consumption of memory is
569
+ fixed and very small, in contrast with the exponential memory requirements
570
+ of the conventional approach.
571
+ </p>
572
+ <pre>
573
+ for row, col in (1..10).x(1..30)
574
+ Matrix[row, col] = row**2 + col**3
575
+ end
576
+ </pre>
577
+ <p>
578
+ Of course, calls can be chained as in
579
+ </p>
580
+ <pre>
581
+ for x, y, z in (1..10).x(1..10).x(1..10)
582
+ # ... do something ...
583
+ end
584
+ </pre>
585
+ <p>
586
+ Beware that both <tt>self</tt> and <tt>other</tt> must implement
587
+ <tt>to_a</tt>, i.e., be convertible to array.
588
+ </p>
589
+
590
+
591
+
592
+ <div class="method-source-code"
593
+ id="x-source">
594
+ <pre>
595
+ <span class="ruby-comment cmt"># File lib/cartesian.rb, line 101</span>
596
+ 101: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">x</span>(<span class="ruby-identifier">other</span>)
597
+ 102: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">other</span>
598
+ 103: <span class="ruby-keyword kw">when</span> <span class="ruby-constant">CartesianIterator</span>
599
+ 104: <span class="ruby-identifier">other</span>.<span class="ruby-identifier">left_product</span>(<span class="ruby-keyword kw">self</span>)
600
+ 105: <span class="ruby-keyword kw">else</span>
601
+ 106: <span class="ruby-constant">CartesianIterator</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">other</span>)
602
+ 107: <span class="ruby-keyword kw">end</span>
603
+ 108: <span class="ruby-keyword kw">end</span></pre>
604
+ </div>
605
+
606
+ </div>
607
+
608
+
609
+ <div class="aliases">
610
+ Also aliased as: <a href="Cartesian.html#method-i-cartesian">cartesian</a>, <a href="Cartesian.html#method-i-right_product">right_product</a>
611
+ </div>
612
+
613
+
614
+
615
+ </div>
616
+
617
+
618
+ </div>
619
+
620
+
621
+ </div>
622
+
623
+
624
+ <div id="rdoc-debugging-section-dump" class="debugging-section">
625
+
626
+ <p>Disabled; run with --debug to generate this.</p>
627
+
628
+ </div>
629
+
630
+ <div id="validator-badges">
631
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
632
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
633
+ Rdoc Generator</a> 1.1.6</small>.</p>
634
+ </div>
635
+
636
+ </body>
637
+ </html>
638
+