# HG changeset patch # User Mike Pavone # Date 1292904689 0 # Node ID d86df83402f38e4bcf3a088cbd17a27ab76c70d1 # Parent e9a8269384bbcf817b068b044f8449b2ccb71061 Small performance optimization in string lib diff -r e9a8269384bb -r d86df83402f3 pattern.rhope --- a/pattern.rhope Sun Dec 05 18:04:54 2010 -0500 +++ b/pattern.rhope Tue Dec 21 04:11:29 2010 +0000 @@ -100,16 +100,17 @@ Match@Pattern[pattern,string:num,no match,idx] { - num,no match,idx <- [pattern]_Match[string,0] + num,no match,idx <- [pattern]_Match[string,0,[string]Byte[0]] } -_Match@Pattern[pattern,string,n:num,no match,idx] +_Match@Pattern[pattern,string,n,b:num,no match,idx] { - b <- [string]Byte[n] myb <- [pattern]Byte >> If[[b]=[myb]] { - num, ,idx <- [[pattern]Straight >>]_Match[string, [n]+[1]] { } + ,check terminal <- [string]Byte[[n]+[1]] + { num,check terminal,idx <- [[pattern]Straight >>]_Match[string, [n]+[1], ~] } + Val[check terminal] { ,no match <- If[[pattern]Terminal? >>] { @@ -121,10 +122,11 @@ }{ If[[b]<[myb]] { - num, no match, idx <- [[pattern]Left >>]_Match[string, n] + num, no match, idx <- [[pattern]Left >>]_Match[string, n,b] }{ - num, no match, idx <- [[pattern]Right >>]_Match[string, n] + num, no match, idx <- [[pattern]Right >>]_Match[string, n,b] } } } + diff -r e9a8269384bb -r d86df83402f3 string.rhope --- a/string.rhope Sun Dec 05 18:04:54 2010 -0500 +++ b/string.rhope Tue Dec 21 04:11:29 2010 +0000 @@ -446,7 +446,9 @@ left <- "" right <- string }{ - sliceoffset <- CPOff to BOff[[string]Buffer >>, 0i32, 0i32, slicepoint] + If[[[string]Length] = [[string]Byte Length]] + { sliceoffset <- Val[slicepoint] } + { sliceoffset <- CPOff to BOff[[string]Buffer >>, 0i32, 0i32, slicepoint] } left <- String Slice[string, 0i32, slicepoint, sliceoffset] right <- String Slice[string, sliceoffset, [[string]Length >>]-[slicepoint], [[[string]Buffer >>]Length]-[sliceoffset]] } @@ -650,7 +652,9 @@ left <- "" right <- string }{ - sliceoffset <- CPOff to BOff[[[string]Source >>]Buffer >>, 0i32, [string]Offset >>, slicepoint] + If[[[string]Length]=[[string]Byte Length]] + { sliceoffset <- [[string]Offset >>]+[slicepoint] } + { sliceoffset <- CPOff to BOff[[[string]Source >>]Buffer >>, 0i32, [string]Offset >>, slicepoint] } left <- String Slice[[string]Source >>, [string]Offset >>, slicepoint, [sliceoffset]-[[string]Offset >>]] right <- String Slice[[string]Source >>, sliceoffset, [[string]Length >>]-[slicepoint], [[string]Byte Length]-[[sliceoffset]-[[string]Offset >>]]] }