from libcpp.vector cimport vector
from cymem.cymem cimport Pool
from preshed.maps cimport key_t, MapStruct

from ..attrs cimport attr_id_t
from ..structs cimport SpanC
from ..tokens.doc cimport Doc
from ..vocab cimport Vocab


cdef class PhraseMatcher:
    cdef readonly Vocab vocab
    cdef attr_id_t attr
    cdef object _callbacks
    cdef object _docs
    cdef bint _validate
    cdef MapStruct* c_map
    cdef Pool mem
    cdef key_t _terminal_hash

    cdef void find_matches(self, Doc doc, int start_idx, int end_idx, vector[SpanC] *matches) nogil