Sha256: f8d50a6335f3d65e558f2ccc9c5c20de142507d288481ec9584fdc6383964306

Contents?: true

Size: 916 Bytes

Versions: 1

Compression:

Stored size: 916 Bytes

Contents

module Rambling
  class TrieNode
    include ChildrenHashDeferer
    include TrieCompressor
    include TrieBranches

    attr_reader :letter, :children, :parent

    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

    def terminal=(terminal)
      @is_terminal = terminal
    end

    def terminal?
      @is_terminal
    end

    def as_word
      raise InvalidTrieOperation.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

    def parent=(parent)
      @parent = parent
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rambling-trie-0.3.2 ./lib/trie_node.rb