lib/rambling/trie/compressor.rb in rambling-trie-0.5.0 vs lib/rambling/trie/compressor.rb in rambling-trie-0.5.1

- old
+ new

@@ -3,47 +3,47 @@ # Provides the compressing behavior for the Trie data structure. module Compressor # Flag for compressed tries. # @return [Boolean] `true` for compressed tries, `false` otherwise. def compressed? - @parent.nil? ? false : @parent.compressed? + parent and parent.compressed? end # Compress the current node using redundant node elimination. # @return [Root, Node] the compressed node. def compress_tree! - if @children.size == 1 and not terminal? and @letter - merge_with! @children.values.first + if children.size == 1 and not terminal? and letter + merge_with! children.values.first compress_tree! end - @children.values.each &:compress_tree! + children.values.each &:compress_tree! self end private def merge_with!(child) - new_letter = (@letter.to_s << child.letter.to_s).to_sym + new_letter = (letter.to_s << child.letter.to_s).to_sym - rehash_on_parent! @letter, new_letter + rehash_on_parent! letter, new_letter redefine_self! new_letter, child - @children.values.each { |node| node.parent = self } + children.values.each { |node| node.parent = self } end def rehash_on_parent!(old_letter, new_letter) - return if @parent.nil? + return if parent.nil? - @parent.delete old_letter - @parent[new_letter] = self + parent.delete old_letter + parent[new_letter] = self end def redefine_self!(new_letter, merged_node) - @letter = new_letter - @children = merged_node.children - @terminal = merged_node.terminal? + self.letter = new_letter + self.children = merged_node.children + self.terminal = merged_node.terminal? end end end end