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