class ThaiLang::PrefixTree

Public Class Methods

new(sorted_words_with_payload) click to toggle source
# File lib/thailang4r/word_breaker.rb, line 15
def initialize(sorted_words_with_payload)
  @prefix_tree = {}
  sorted_words_with_payload.each.with_index do |(w, payload), i|
    row_no = 0
    ch_vec = w.codepoints
    ch_len = w.length
    ch_vec.each.with_index do |ch, j|
      node_key = NodeKey.new(row_no, j, ch)
      ex_node_ptr = @prefix_tree[node_key]
      if ex_node_ptr
        row_no = ex_node_ptr[NODE_PTR_ROW_NO]
      else
        is_final = (j + 1 == ch_len)
        node_ptr = [i, is_final, if is_final; payload; end]
        @prefix_tree[node_key] = node_ptr
        row_no = i
      end
    end
  end
end

Public Instance Methods

lookup(row_id, offset, ch) click to toggle source
# File lib/thailang4r/word_breaker.rb, line 36
def lookup(row_id, offset, ch)
  @prefix_tree[NodeKey.new(row_id, offset, ch)]
end