]>
Commit | Line | Data |
---|---|---|
a99d15a3 MG |
1 | #define PERL_NO_GET_CONTEXT |
2 | #include "EXTERN.h" | |
3 | #include "perl.h" | |
4 | #include "XSUB.h" | |
5 | ||
6 | #include "ppport.h" | |
7 | ||
8 | #include <edlib.h> | |
9 | ||
10 | #include "const-c.inc" | |
11 | ||
12 | MODULE = Text::Levenshtein::Edlib PACKAGE = Text::Levenshtein::Edlib | |
13 | ||
14 | INCLUDE: const-xs.inc | |
15 | PROTOTYPES: ENABLE | |
16 | ||
17 | SV* | |
18 | edlibAlign(const char *query, int length(query), const char *target, int length(target), int k, int mode, int task) | |
19 | PREINIT: | |
20 | EdlibAlignResult align_result; | |
21 | SV *returned_av_ref; | |
22 | AV *returned_av, *endAV, *startAV, *alignAV; | |
23 | int i; | |
24 | CODE: | |
25 | align_result = edlibAlign(query, XSauto_length_of_query, target, XSauto_length_of_target, edlibNewAlignConfig(k, mode, task)); | |
26 | returned_av = newAV(); | |
27 | av_push(returned_av, newSViv(align_result.editDistance)); | |
28 | av_push(returned_av, newSViv(align_result.alphabetLength)); | |
29 | if(align_result.endLocations == NULL) | |
30 | av_push(returned_av, &PL_sv_undef); | |
31 | else { | |
32 | endAV = newAV(); | |
33 | for(i = 0 ; i < align_result.numLocations ; i++) | |
34 | av_push(endAV, newSViv(align_result.endLocations[i])); | |
35 | av_push(returned_av, newRV_noinc((SV*)endAV)); | |
36 | } | |
37 | if(align_result.startLocations == NULL) | |
38 | av_push(returned_av, &PL_sv_undef); | |
39 | else { | |
40 | startAV = newAV(); | |
41 | for(i = 0 ; i < align_result.numLocations ; i++) | |
42 | av_push(startAV, newSViv(align_result.startLocations[i])); | |
43 | av_push(returned_av, newRV_noinc((SV*)startAV)); | |
44 | } | |
45 | if(align_result.alignment == NULL) | |
46 | av_push(returned_av, &PL_sv_undef); | |
47 | else { | |
48 | startAV = newAV(); | |
49 | for(i = 0 ; i < align_result.alignmentLength ; i++) | |
50 | av_push(startAV, newSViv(align_result.alignment[i])); | |
51 | av_push(returned_av, newRV_noinc((SV*)startAV)); | |
52 | } | |
53 | edlibFreeAlignResult(align_result); | |
54 | RETVAL = newRV_noinc((SV*)returned_av); | |
55 | OUTPUT: | |
56 | RETVAL | |
329961ff MG |
57 | |
58 | ||
59 | char* | |
60 | edlibAlignmentToCigar(unsigned char *alignment, int length(alignment), int format) |