summaryrefslogtreecommitdiff
path: root/devel/py-editdistance/files/bycython.pyx
blob: d64a67a8e89346a2b8342242f9b3c1e7084d2e09 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# distutils: language = c++
# distutils: sources = editdistance/_editdistance.cpp

from libc.stdlib cimport malloc, free
# from libc.stdint cimport int64_t

cdef extern from "./_editdistance.h":
    ctypedef int int64_t
    unsigned int edit_distance(const int64_t *a, const unsigned int asize, const int64_t *b, const unsigned int bsize)

cpdef unsigned int eval(object a, object b) except 0xffffffffffffffff:
    cdef unsigned int i, dist
    cdef int64_t *al = <int64_t *>malloc(len(a) * sizeof(int64_t))
    for i in range(len(a)):
        al[i] = hash(a[i])
    cdef int64_t *bl = <int64_t *>malloc(len(b) * sizeof(int64_t))
    for i in range(len(b)):
        bl[i] = hash(b[i])
    dist = edit_distance(al, len(a), bl, len(b))
    free(al)
    free(bl)
    return dist