lib/rambling/trie/compressor.rb in rambling-trie-0.9.0 vs lib/rambling/trie/compressor.rb in rambling-trie-0.9.1

- old
+ new

@@ -3,42 +3,40 @@ # Responsible for the compression process of a Trie data structure. class Compressor # Compresses a node from a Trie data structure. # @param [RawNode] node the node to compress # @return [CompressedNode] node the compressed version of the node - def compress node, parent = nil + def compress node if node.compressable? - merge_node_with_compressed_child node, parent + merge_with_child_and_compress node else - copy_node_and_compress_children node, parent + copy_node_and_compress_children node end end private - def merge_node_with_compressed_child node, parent - compressed_child = compress node.children.first + def merge_with_child_and_compress node + child = node.children.first - new_node = Rambling::Trie::CompressedNode.new parent - new_node.letter = node.letter.to_s << compressed_child.letter.to_s - new_node.terminal! if compressed_child.terminal? - new_node.children_tree = compressed_child.children_tree + new_node = Rambling::Trie::CompressedNode.new node.parent + new_node.letter = node.letter.to_s << child.letter.to_s + new_node.terminal! if child.terminal? + new_node.children_tree = child.children_tree - new_node.children.each do |child| - child.parent = new_node - end - - new_node + compress new_node end - def copy_node_and_compress_children node, parent - new_node = Rambling::Trie::CompressedNode.new parent - + def copy_node_and_compress_children node + new_node = Rambling::Trie::CompressedNode.new node.parent new_node.letter = node.letter new_node.terminal! if node.terminal? - node.children.map do |child| - compress child, new_node + node.children.each do |child| + compressed_child = compress child + + compressed_child.parent = new_node + new_node[compressed_child.letter] = compressed_child end new_node end end