Module: Jumoku::RawUndirectedTreeBuilder
- Includes:
- Shared, Plexus::UndirectedGraphBuilder
- Included in:
- RawUndirectedTree, TreeBuilder
- Defined in:
- lib/jumoku/builders/raw_undirected_tree.rb
Overview
A RawUndirectedTree sticks to the standard definition of trees in Graph Theory:
* undirected,
* connected,
* acyclic.
It thus uses Plexus::UndirectedGraphBuilder as its backend, which ensure the first constraint.
RawUndirectedTreeBuilder ensures the two remaining constraints are satisfied. It offers limited functionalities, therefore the main tree structure you’ll likely to use is its extended version, TreeBuilder.
Constant Summary
Constants included from Shared
Instance Attribute Summary
Attributes included from Shared
Instance Method Summary collapse
-
#initialize(*params) ⇒ Object
This method is called by the specialized implementations upon tree creation.
-
#valid? ⇒ Boolean
Checks whether the tree is really a valid tree, that is if the following conditions are fulfilled:.
Methods included from Shared
#add_branch!, #add_node!, #branches, #empty?, included, #nodes, #remove_branch!, #remove_node!, #terminal?, #terminal_nodes
Instance Method Details
#initialize(*params) ⇒ Object
This method is called by the specialized implementations upon tree creation.
Initialization parameters can include:
-
an array of branches to add
-
one or several trees to copy (will be merged if multiple)
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/jumoku/builders/raw_undirected_tree.rb', line 27 def initialize(*params) super(*params) # Delegates to Plexus. args = (params.pop if params.last.is_a? Hash) || {} @_options = args strategies = _extract_strategies(args) super(*params) # Delegates to Plexus. class << self; self; end.module_eval do strategies.each { |strategy| include strategy } alias has_branch? has_edge? end end |
#valid? ⇒ Boolean
Checks whether the tree is really a valid tree, that is if the following conditions are fulfilled:
-
undirected
-
acyclic
-
connected
49 50 51 |
# File 'lib/jumoku/builders/raw_undirected_tree.rb', line 49 def valid? super && !directed? end |