Sha256: b4a309986a3aa262a9bfa068db6aeb194da8fd4e03a7025664b69a0ffb5bfe6b
Contents?: true
Size: 1.98 KB
Versions: 1
Compression:
Stored size: 1.98 KB
Contents
require "melisa/base_config_flags" require "melisa/search" module Melisa ImmutableError = Class.new(StandardError) class Trie include Enumerable attr_reader :trie # Initialize a BaseTrie. # @keys An array of UTF-8 strings # @weights An array of corresponding weights # @opts # :binary Boolean, true for a binary Trie, false for text # :num_tries An integer from 1 to 127 representing the depth of recursive Tries # :cache_size One of [:tiny, :small, :normal, :large, :huge] # :order One of [:label, :weight] def initialize(keys=[], weights=[], opts={}) @trie = Marisa::Trie.new @keyset = Marisa::Keyset.new @options = opts @built = false add_many(keys, weights) end def build @trie.build(@keyset, config_flags(@options)) unless @built @built = true end def add(key, weight=nil) raise ImmutableError, "Can't add #{key}, Trie already built" if @built self.tap { push(key, weight) } end alias :<< :add def add_many(keys, weights) for key, weight in keys.zip(weights) push(key, weight) end end def search(prefix) build unless @built Search.new(self, prefix) end def each(&block) build unless @built search('').each(&block) end def size build unless @built @trie.num_keys() end def keys build unless @built search('').keys end def has_keys? build unless @built search('').has_keys? end def include?(key) build unless @built search('').include?(key) end def load(path) self.tap { @trie.load(path); @built = true } end def save(path) build unless @built self.tap { @trie.save(path) } end protected include BaseConfigFlags def push(key, weight=nil) if weight @keyset.push_back(key, weight) else @keyset.push_back(key) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
melisa-0.1.0 | lib/melisa/trie.rb |