Changeset 31804 for lang/perl/Text-Darts/trunk
- Timestamp:
- 04/02/09 06:05:25 (4 years ago)
- Location:
- lang/perl/Text-Darts/trunk
- Files:
-
- 4 modified
-
Changes (modified) (1 diff)
-
Darts.xs (modified) (3 diffs)
-
lib/Text/Darts.pm (modified) (1 diff)
-
t/benchmark.pl (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/Text-Darts/trunk/Changes
r31702 r31804 4 4 # 5 5 $Revision: 0.6 $ $Date: 2009/03/30 12:57:33 $ 6 ! Darts.xs lib/Text/Darts.pm 7 More optimization 8 9 0.06 2009/03/30 12:57:33 6 10 ! Darts.xs lib/Text/Darts.pm 7 11 Optimized gsub($str, \%hashref); -
lang/perl/Text-Darts/trunk/Darts.xs
r31702 r31804 70 70 } 71 71 72 72 73 static SV *da_gsub(int dpi, SV *src, SV *rep){ 73 SV *result = newSV( 0);74 SV *result = newSV(SvCUR(src) * 2); 74 75 Darts::DoubleArray *dp = INT2PTR(Darts::DoubleArray *, dpi); 75 76 Darts::DoubleArray::result_pair_type result_pair[MAX_NMATCH]; … … 79 80 80 81 while (head < tail) { 81 size_t size = 82 dp->commonPrefixSearch(head,result_pair, sizeof(result_pair)); 83 size_t seekto = 0; 82 char *ohead = head; 83 size_t size, slen; 84 while(head < tail){ 85 size = 86 dp->commonPrefixSearch(head,result_pair, sizeof(result_pair)); 87 if (size) break; 88 head++; 89 } 90 if (head != ohead){ 91 sv_catpvn(result, ohead, (head - ohead)); 92 } 84 93 if (size) { 94 size_t seekto = 0; 85 95 for (size_t i = 0; i < size; ++i) { 86 96 if (seekto < result_pair[i].length) … … 94 104 head += seekto; 95 105 } 96 }97 if (seekto == 0) {98 sv_catpvn(result, head, 1);99 ++head;100 106 } 101 107 } -
lang/perl/Text-Darts/trunk/lib/Text/Darts.pm
r31702 r31804 11 11 sub new{ 12 12 my $pkg = shift; 13 my $dpi = xs_make([ sort @_]);13 my $dpi = xs_make([ grep { $_ } sort @_]); 14 14 bless \$dpi, $pkg; 15 15 } -
lang/perl/Text-Darts/trunk/t/benchmark.pl
r3501 r31804 7 7 8 8 my $str = do { open my $fh, __FILE__; local $/; my $s = <$fh>; close $fh; $s }; 9 my @words = do { my %h; $ h{$_}++ for split /\W+/, $str; keys %h };9 my @words = do { my %h; $_ and $h{$_}++ for split /\W+/, $str; keys %h }; 10 10 11 11 my $td = Text::Darts->new(@words); … … 18 18 { 19 19 Darts => sub { 20 $td->gsub( $str, sub { "<$_[0]>" } );21 },20 $td->gsub( $str, sub { "<$_[0]>" } ); 21 }, 22 22 'R::A' => sub { 23 23 my $tmp = $str;
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)