Sha256: b2afd809a8b69adfd900d099c100126e8f5f38e4bddb85ac6daaa00293bee36e

Contents?: true

Size: 1.73 KB

Versions: 1

Compression:

Stored size: 1.73 KB

Contents

module Rambling
  module Trie
    # A representation of a node in the Trie data structure.
    class Node
      include ChildrenHashDeferer
      include Compressor
      include Branches

      # Letter or letters corresponding to this node.
      # @return [Symbol, nil] the corresponding letter(s) or nil.
      attr_reader :letter

      # Children nodes.
      # @return [Hash] the children hash, consisting of :letter => node.
      attr_reader :children

      # Parent node.
      # @return [TrieNode, nil] the parent node or nil for the root element.
      attr_accessor :parent

      # Creates a new TrieNode.
      # @param [String] word the word from which to create this TrieNode and his branch.
      # @param [TrieNode] parent the parent of this node.
      def initialize(word, parent = nil)
        @letter = nil
        @parent = parent
        @is_terminal = false
        @children = {}

        unless word.nil? or word.empty?
          letter = word.slice!(0)
          @letter = letter.to_sym unless letter.nil?
          @is_terminal = word.empty?
          add_branch_from(word)
        end
      end

      # Flag for terminal nodes.
      # @return [Boolean] `true` for terminal nodes, `false` otherwise.
      def terminal?
        @is_terminal
      end

      # String representation of the current node, if it is a terminal node.
      # @return [String] the string representation of the current node.
      # @raise [InvalidTrieOperation] if node is not terminal or is root.
      def as_word
        raise InvalidOperation.new() unless @letter.nil? or terminal?
        get_letter_string
      end

      protected
      def get_letter_string
        (@parent.nil? ? '' : @parent.get_letter_string) + @letter.to_s
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rambling-trie-0.4.0 lib/rambling-trie/node.rb