1 #define PERL_NO_GET_CONTEXT
10 #include "const-c.inc"
12 MODULE = Text::Levenshtein::Edlib PACKAGE = Text::Levenshtein::Edlib
18 edlibAlign(const char *query, int length(query), const char *target, int length(target), int k, int mode, int task)
20 EdlibAlignResult align_result;
22 AV *returned_av, *endAV, *startAV, *alignAV;
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);
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));
37 if(align_result.startLocations == NULL)
38 av_push(returned_av, &PL_sv_undef);
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));
45 if(align_result.alignment == NULL)
46 av_push(returned_av, &PL_sv_undef);
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));
53 edlibFreeAlignResult(align_result);
54 RETVAL = newRV_noinc((SV*)returned_av);
60 edlibAlignmentToCigar(unsigned char *alignment, int length(alignment), int format)