comp_tree 1.1.1 → 1.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/CHANGES.rdoc CHANGED
@@ -1,6 +1,11 @@
1
1
 
2
2
  = comp_tree Changes
3
3
 
4
+ == Version 1.1.2
5
+
6
+ * optimizations
7
+ * doc fixes
8
+
4
9
  == Version 1.1.1
5
10
 
6
11
  * fix documentation
data/devel/levitate.rb CHANGED
@@ -250,7 +250,7 @@ class Levitate
250
250
  include Util
251
251
 
252
252
  def initialize(gem_name)
253
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
253
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
254
254
 
255
255
  require 'rubygems/package_task'
256
256
 
@@ -402,11 +402,7 @@ class Levitate
402
402
  end
403
403
 
404
404
  attribute :extra_rdoc_files do
405
- result = []
406
- [readme_file, history_file].each { |file|
407
- result << file if File.file?(file)
408
- }
409
- result
405
+ [readme_file, history_file].select { |file| File.file?(file) }
410
406
  end
411
407
 
412
408
  attribute :browser do
@@ -482,9 +478,11 @@ class Levitate
482
478
  begin
483
479
  sections[send("#{section}_section")].
484
480
  gsub("\n", " ").
485
- split(%r!\.\s*!m).
481
+ split(%r!\.\s+!m).
486
482
  first(send("#{section}_sentences")).
487
- join(". ") << "."
483
+ join(". ").
484
+ concat(".").
485
+ sub(%r!\.+\Z!, ".")
488
486
  rescue
489
487
  "FIXME: #{section}"
490
488
  end
@@ -753,7 +751,11 @@ class Levitate
753
751
 
754
752
  def define_changes
755
753
  task :changes do
756
- header = "\n\n== Version ____\n\n"
754
+ if File.read(history_file).index version
755
+ raise "version not updated"
756
+ end
757
+
758
+ header = "\n\n== Version #{version}\n\n"
757
759
 
758
760
  bullets = `git log --format=%s #{last_release}..HEAD`.lines.map { |line|
759
761
  "* #{line}"
data/lib/comp_tree.rb CHANGED
@@ -65,7 +65,7 @@ module CompTree
65
65
  # 2
66
66
  # }
67
67
  #
68
- # # Compute the area using four parallel threads.
68
+ # # Compute the area using up to four parallel threads.
69
69
  # puts driver.compute(:area, 4)
70
70
  # # => 63
71
71
  #
@@ -74,6 +74,13 @@ module CompTree
74
74
  # # => 63
75
75
  # end
76
76
  #
77
+ # A custom <code>CompTree::Node</code> subclass may optionally be
78
+ # provided,
79
+ #
80
+ # CompTree.build(:node_class => MyNode) { ... }
81
+ #
82
+ # This will build the tree with +MyNode+ instances.
83
+ #
77
84
  def self.build(opts = {})
78
85
  yield Driver.new(opts)
79
86
  end
@@ -13,7 +13,9 @@ module CompTree
13
13
  workers.size.times { to_workers.push(nil) }
14
14
  workers.each { |t| t.join }
15
15
 
16
- raise node.computed if node.computed.is_a? Exception
16
+ if node.computed.is_a? Exception
17
+ raise node.computed
18
+ end
17
19
  node.result
18
20
  end
19
21
 
@@ -26,8 +28,7 @@ module CompTree
26
28
  }
27
29
  end
28
30
 
29
- def master_loop(root, arg1, workers, from_workers, to_workers)
30
- max_threads = arg1 == 0 ? nil : arg1
31
+ def master_loop(root, max_threads, workers, from_workers, to_workers)
31
32
  num_working = 0
32
33
  node = nil
33
34
  while true
@@ -62,7 +63,7 @@ module CompTree
62
63
  # already computed
63
64
  #
64
65
  nil
65
- elsif not node.locked? and node.children_results
66
+ elsif node.free? and node.children_results
66
67
  #
67
68
  # Node is not computed, not locked, and its children are
68
69
  # computed; ready to compute.
@@ -72,7 +73,7 @@ module CompTree
72
73
  #
73
74
  # locked or children not computed; recurse to children
74
75
  #
75
- node.each_child { |child|
76
+ node.children.each { |child|
76
77
  found = find_node(child) and return found
77
78
  }
78
79
  nil
@@ -29,11 +29,11 @@ module CompTree
29
29
  # to the block. The block returns the result of this node's
30
30
  # computation.
31
31
  #
32
- # In this example, a computation node named +area+ is defined
33
- # which depends on the nodes +width+ and +height+.
32
+ # In the following example, a computation node named +:area+ is
33
+ # defined which depends on the nodes named +:width+ and +:height+.
34
34
  #
35
- # driver.define(:area, :width, :height) { |width, height|
36
- # width*height
35
+ # driver.define(:area, :width, :height) { |w, h|
36
+ # w*h
37
37
  # }
38
38
  #
39
39
  def define(name, *child_names, &block)
@@ -110,15 +110,16 @@ module CompTree
110
110
  raise TypeError, "can't convert #{max_threads.class} into Integer"
111
111
  end
112
112
  if max_threads < 0
113
- raise RangeError, "number of threads must be nonnegative"
113
+ raise RangeError, "max threads must be nonnegative"
114
114
  end
115
+
115
116
  root = @nodes[name] or raise NoNodeError.new(name)
116
117
  if root.computed
117
118
  root.result
118
119
  elsif max_threads == 1
119
120
  root.compute_now
120
121
  else
121
- Algorithm.compute_parallel(root, max_threads)
122
+ Algorithm.compute_parallel(root, max_threads == 0 ? nil : max_threads)
122
123
  end
123
124
  end
124
125
  end
@@ -11,8 +11,7 @@ module CompTree
11
11
  :children,
12
12
  :function,
13
13
  :result,
14
- :computed,
15
- :lock_level
14
+ :computed
16
15
  )
17
16
 
18
17
  #
@@ -40,28 +39,9 @@ module CompTree
40
39
  # Reset the computation for this node and all children.
41
40
  #
42
41
  def reset
43
- each_downward { |node|
44
- node.reset_self
45
- }
46
- end
47
-
48
- def each_downward(&block)
49
- block.call(self)
50
- @children.each { |child|
51
- child.each_downward(&block)
52
- }
53
- end
54
-
55
- def each_upward(&block)
56
- block.call(self)
57
- @parents.each { |parent|
58
- parent.each_upward(&block)
59
- }
60
- end
61
-
62
- def each_child
42
+ reset_self
63
43
  @children.each { |child|
64
- yield(child)
44
+ child.reset
65
45
  }
66
46
  end
67
47
 
@@ -89,14 +69,12 @@ module CompTree
89
69
  # otherwise return nil.
90
70
  #
91
71
  def children_results
92
- @children_results or (
93
- @children_results = @children.map { |child|
94
- unless child.computed
95
- return nil
96
- end
97
- child.result
98
- }
99
- )
72
+ @children_results ||= @children.map { |child|
73
+ unless child.computed
74
+ return nil
75
+ end
76
+ child.result
77
+ }
100
78
  end
101
79
 
102
80
  #
@@ -116,19 +94,21 @@ module CompTree
116
94
  @result
117
95
  end
118
96
 
119
- def locked?
120
- @lock_level != 0
97
+ def free?
98
+ @lock_level.zero?
121
99
  end
122
100
 
123
101
  def lock
124
- each_upward { |node|
125
- node.lock_level += 1
102
+ @lock_level = @lock_level.succ
103
+ @parents.each { |parent|
104
+ parent.lock
126
105
  }
127
106
  end
128
107
 
129
108
  def unlock
130
- each_upward { |node|
131
- node.lock_level -= 1
109
+ @lock_level -= 1 # Fixnum#pred not in 1.8.6
110
+ @parents.each { |parent|
111
+ parent.unlock
132
112
  }
133
113
  end
134
114
  end
@@ -1,3 +1,3 @@
1
1
  module CompTree
2
- VERSION = "1.1.1"
2
+ VERSION = "1.1.2"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: comp_tree
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.1
5
+ version: 1.1.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - James M. Lawrence
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-02 00:00:00 -05:00
13
+ date: 2011-03-08 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies: []
16
16