File: Similarity.xs

package info (click to toggle)
libstring-similarity-perl 1.04-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 128 kB
  • sloc: ansic: 392; perl: 10; makefile: 2
file content (55 lines) | stat: -rw-r--r-- 1,026 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "fstrcmp.h"
#include "fstrcmp.c"

UV *
text2UV (SV *sv, STRLEN *lenp)
{
  STRLEN len;
  char *s = SvPV (sv, len);
  UV *r = (UV *)SvPVX (sv_2mortal (NEWSV (0, (len + 1) * sizeof (UV))));
  UV *p = r;

  if (SvUTF8 (sv))
    {
       STRLEN clen;
       while (len)
         {
           *p++ = utf8n_to_uvchr (s, len, &clen, 0);

           if (clen < 0)
             croak ("illegal unicode character in string");

           s += clen;
           len -= clen;
         }
    }
  else
    while (len--)
      *p++ = *(unsigned char *)s++;

  *lenp = p - r;
  return r;
}

MODULE = String::Similarity		PACKAGE = String::Similarity

double
fstrcmp(s1, s2, minimum_similarity = 0)
	SV *	s1
        SV *	s2
        double	minimum_similarity
        PROTOTYPE: @
        CODE:
{
        STRLEN l1, l2;
        UV *c1 = text2UV (s1, &l1);
        UV *c2 = text2UV (s2, &l2);
        RETVAL = fstrcmp (c1, l1, c2, l2, minimum_similarity);
}
	OUTPUT:
        RETVAL