Class: VinaryTree::Liblevenshtein::Transducer

Inherits:
Object
  • Object
show all
Defined in:
lib/vinary_tree/liblevenshtein.rb

Constant Summary collapse

STANDARD =
0
TRANSPOSITION =
1
MERGE_AND_SPLIT =
2
DAMERAU_LEVENSHTEIN =
3

Instance Method Summary collapse

Constructor Details

#initialize(dictionary, algorithm: STANDARD) ⇒ Transducer

Returns a new instance of Transducer.

Raises:

  • (ArgumentError)


97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/vinary_tree/liblevenshtein.rb', line 97

def initialize(dictionary, algorithm: STANDARD)
  raise ArgumentError, "dictionary must respond to with_resource" unless dictionary.respond_to?(:with_resource)
  output = Native.pointer_output
  dictionary.with_resource do |context, vtable|
    resource = Native::VtResource.malloc
    resource.context = context
    resource.vtable = vtable
    Liblevenshtein.check(Native.llev_transducer_new(resource, algorithm, output))
  end
  @handle = ConcurrentHandle.new(Native.read_pointer(output), Native.method(:llev_transducer_free))
  ObjectSpace.define_finalizer(self, ConcurrentHandle.finalizer(@handle))
end

Instance Method Details

#closeObject



133
134
135
136
137
# File 'lib/vinary_tree/liblevenshtein.rb', line 133

def close
  @handle.close
  ObjectSpace.undefine_finalizer(self)
  nil
end

#query(text, maximum_distance, order: 0) ⇒ Object



110
111
112
# File 'lib/vinary_tree/liblevenshtein.rb', line 110

def query(text, maximum_distance, order: 0)
  start_query(:llev_transducer_query_utf8, text.b, maximum_distance, order)
end

#query_bytes(bytes, maximum_distance) ⇒ Object



114
115
116
# File 'lib/vinary_tree/liblevenshtein.rb', line 114

def query_bytes(bytes, maximum_distance)
  start_query(:llev_transducer_query_bytes, bytes.b, maximum_distance, 0)
end

#query_pattern(pattern, maximum_distance) ⇒ Object



123
124
125
126
127
128
129
130
131
# File 'lib/vinary_tree/liblevenshtein.rb', line 123

def query_pattern(pattern, maximum_distance)
  with_pointer do |pointer|
    pattern.__send__(:with_pointer) do |pattern_pointer|
      output = Native.pointer_output
      Liblevenshtein.check(Native.llev_transducer_query_pattern(pointer, pattern_pointer, maximum_distance, output))
      Query.new(Native.read_pointer(output))
    end
  end
end

#query_u64(tokens, maximum_distance) ⇒ Object



118
119
120
121
# File 'lib/vinary_tree/liblevenshtein.rb', line 118

def query_u64(tokens, maximum_distance)
  packed = tokens.pack("Q*")
  start_query(:llev_transducer_query_u64, packed, maximum_distance, 0, tokens.length)
end