11#include "ruby.h"
22
3- int min ( int a , int b , int c ) {
4- int min = a ;
3+ long min_three ( long a , long b , long c ) {
4+ long min = a ;
55 if (b < min )
66 min = b ;
77 if ( c < min )
88 min = c ;
99 return min ;
1010}
1111
12- int levenshtein_distance (VALUE str1 , VALUE str2 ) {
13- int i , j , s1_len , s2_len , * d ;
12+ long levenshtein_distance (VALUE str1 , VALUE str2 ) {
13+ long i , j , s1_len , s2_len , * d ;
1414 char * s = RSTRING_PTR (str1 );
1515 char * t = RSTRING_PTR (str2 );
16- s1_len = RSTRING_LEN (str1 );
16+ s1_len = RSTRING_LEN (str1 );
1717 s2_len = RSTRING_LEN (str2 );
1818
1919 if (s1_len == 0 ) {
@@ -26,7 +26,7 @@ int levenshtein_distance(VALUE str1, VALUE str2) {
2626 s1_len ++ ;
2727 s2_len ++ ;
2828
29- d = malloc (sizeof (int ) * (s1_len ) * (s2_len ));
29+ d = malloc (sizeof (typeof ( d ) ) * (s1_len ) * (s2_len ));
3030
3131 for (i = 0 ; i < s1_len ; i ++ ) {
3232 d [i ] = i ; // d[i, 0] = i
@@ -40,11 +40,11 @@ int levenshtein_distance(VALUE str1, VALUE str2) {
4040 if (s [i - 1 ] == t [j - 1 ]) {
4141 d [j * s1_len + i ] = d [(j - 1 ) * s1_len + (i - 1 )];
4242 } else {
43- d [j * s1_len + i ] = min (
43+ d [j * s1_len + i ] = 1 + min_three (
4444 d [j * s1_len + (i - 1 )],
4545 d [(j - 1 ) * s1_len + i ],
4646 d [(j - 1 ) * s1_len + (i - 1 )]
47- ) + 1 ;
47+ );
4848 }
4949 }
5050 }
@@ -54,7 +54,7 @@ int levenshtein_distance(VALUE str1, VALUE str2) {
5454}
5555
5656static VALUE lev_dist (VALUE self , VALUE str1 , VALUE str2 ) {
57- return INT2FIX (levenshtein_distance ( str1 , str2 ));
57+ return LONG2FIX (levenshtein_distance ( str1 , str2 ));
5858}
5959
6060static VALUE mAlgorithms ;
0 commit comments