Sha256: 432e5b59b3f2f0a0bb14f1894b3fb4a308c3f2919025c7a9172321ac3b482169
Contents?: true
Size: 1.15 KB
Versions: 1
Compression:
Stored size: 1.15 KB
Contents
module Kruskal class Tree extend Forwardable include Enumerable def_delegators :@relations, :each def initialize(index, relations = []) @index, @relations = index, relations reindex end def eql?(other) if other.is_a?(self.class) other.relations_equal_to(@relations) elsif other.is_a?(Array) @relations == other else false end end alias == eql? def hash @relations.hash end def add(value, source, target) @relations << [value, source, target] index(target) end def merge!(other_tree) other_tree.add_relations_to(@relations) other_tree.each do |(v, s, t)| index(s, t) end end def inspect "Tree#{@relations.inspect}" end protected def add_relations_to(an_array) an_array.concat(@relations) end def relations_equal_to(an_array) an_array == @relations end private def index(*nodes) nodes.each do |it| @index.index(it, self) end end def reindex @relations.each do |(v, s, t)| index(s, t) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
kruskal-0.1.0 | lib/kruskal/tree.rb |