Merge pull request #10045 from danieldk/merge-master

Update develop with master
This commit is contained in:
Daniël de Kok 2022-01-13 10:32:52 +01:00 committed by GitHub
commit e8a047a8d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,3 +1,4 @@
from cython.operator cimport dereference as deref, preincrement as incr
from libc.string cimport memcpy, memset from libc.string cimport memcpy, memset
from libc.stdlib cimport calloc, free from libc.stdlib cimport calloc, free
from libc.stdint cimport uint32_t, uint64_t from libc.stdint cimport uint32_t, uint64_t
@ -184,16 +185,20 @@ cdef cppclass StateC:
int L(int head, int idx) nogil const: int L(int head, int idx) nogil const:
if idx < 1 or this._left_arcs.size() == 0: if idx < 1 or this._left_arcs.size() == 0:
return -1 return -1
cdef vector[int] lefts
for i in range(this._left_arcs.size()): # Work backwards through left-arcs to find the arc at the
arc = this._left_arcs.at(i) # requested index more quickly.
cdef size_t child_index = 0
it = this._left_arcs.const_rbegin()
while it != this._left_arcs.rend():
arc = deref(it)
if arc.head == head and arc.child != -1 and arc.child < head: if arc.head == head and arc.child != -1 and arc.child < head:
lefts.push_back(arc.child) child_index += 1
idx = (<int>lefts.size()) - idx if child_index == idx:
if idx < 0: return arc.child
incr(it)
return -1 return -1
else:
return lefts.at(idx)
int R(int head, int idx) nogil const: int R(int head, int idx) nogil const:
if idx < 1 or this._right_arcs.size() == 0: if idx < 1 or this._right_arcs.size() == 0: