class SuffixTreeBuilder
Attributes
suffixCount[R]
Public Class Methods
new(stdb, dataSource)
click to toggle source
# File lib/persist/suffix_tree_db.rb, line 52 def initialize(stdb, dataSource) @suffxTreeDB = stdb @dataSource = dataSource @root = nil @unresolvedParents = {} @unresolvedSuffixLinks = {} @unresolvedChildren = {} @allNodes = {} end
Public Instance Methods
buildNode()
click to toggle source
# File lib/persist/suffix_tree_db.rb, line 62 def buildNode nodeId = @suffxTreeDB.readInt() if (nodeId > 0) then node = resolveNodeId(nodeId) resolve(nodeId, node) @allNodes[nodeId] = node @root = node if (@root == nil) resolveParent(node, @suffxTreeDB.readInt()) node.incomingEdgeStartOffset = @suffxTreeDB.readInt() node.incomingEdgeEndOffset = @suffxTreeDB.readInt() @suffixCount = node.suffixOffset = @suffxTreeDB.readInt() resolveSuffixLink(node, @suffxTreeDB.readInt()) childNodeId = @suffxTreeDB.readInt() while (childNodeId != 0) do resolveChild(node, childNodeId) childNodeId = @suffxTreeDB.readInt() end return node end return false end
Private Instance Methods
resolve(nodeId, node)
click to toggle source
# File lib/persist/suffix_tree_db.rb, line 128 def resolve(nodeId, node) if (@unresolvedParents.has_key?(nodeId)) then print "Unresolved parent value #{nodeId}\n" @unresolvedParents[nodeId].parent = node @unresolvedParents.delete(nodeId) end if (@unresolvedChildren.has_key?(nodeId) && (node.incomingEdgeStartOffset >= 0)) then unfinishedNode = @unresolvedChildren[nodeId] if (unfinishedNode.children == nil) then unfinishedNode.children = {} end unfinishedNode.children[@dataSource.valueAt(node.incomingEdgeStartOffset)] = node @unresolvedChildren.delete(nodeId) end if (@unresolvedSuffixLinks.has_key?(nodeId)) then unfinishedNode = @unresolvedSuffixLinks[nodeId] unfinishedNode.suffixLink = node @unresolvedSuffixLinks.delete(nodeId) end end
resolveChild(node, nodeId)
click to toggle source
# File lib/persist/suffix_tree_db.rb, line 102 def resolveChild(node, nodeId) if (@allNodes.has_key?(nodeId)) then childNode = @allNodes[nodeId] if (node.children == nil) then node.children = {} end node.children[@dataSource.valueAt(childNode.incomingEdgeStartOffset)] = childNode else resolveEntry(node, nodeId, @unresolvedChildren) end end
resolveEntry(node, nodeId, theList)
click to toggle source
# File lib/persist/suffix_tree_db.rb, line 114 def resolveEntry(node, nodeId, theList) if (nodeId > 0) then theList[nodeId] = node end end
resolveNodeId(nodeId)
click to toggle source
# File lib/persist/suffix_tree_db.rb, line 120 def resolveNodeId(nodeId) if @allNodes.has_key?(nodeId) then @allNodes[nodeId] else Node.new(nodeId) end end
resolveParent(node, nodeId)
click to toggle source
# File lib/persist/suffix_tree_db.rb, line 86 def resolveParent(node, nodeId) if (@allNodes.has_key?(nodeId)) then node.parent = @allNodes[nodeId] else resolveEntry(node, nodeId, @unresolvedParents) end end
resolveSuffixLink(node, nodeId)
click to toggle source
# File lib/persist/suffix_tree_db.rb, line 94 def resolveSuffixLink(node, nodeId) if (@allNodes.has_key?(nodeId)) then node.suffixLink = @allNodes[nodeId] else resolveEntry(node, nodeId, @unresolvedSuffixLinks) end end