diff options
| author | Rémy Oudompheng <oudomphe@phare.normalesup.org> | 2012-08-05 21:35:41 +0200 |
|---|---|---|
| committer | Rémy Oudompheng <oudomphe@phare.normalesup.org> | 2012-08-05 21:35:41 +0200 |
| commit | 77f3e189d2bd4eb015235d200ca75803e45c87ef (patch) | |
| tree | 76a992e3dbc8ae3170f5e28917bbefd7a6c0178c /src/pkg/runtime/string.goc | |
| parent | ab058b35402aded8579e3e9653c0d78c5c4e9e5e (diff) | |
| download | go-77f3e189d2bd4eb015235d200ca75803e45c87ef.tar.xz | |
runtime: faster string equality.
benchmark old ns/op new ns/op delta
BenchmarkCompareStringEqual 51 35 -30.20%
BenchmarkCompareStringIdentical 51 7 -85.71%
BenchmarkCompareStringSameLength 25 18 -28.29%
BenchmarkCompareStringDifferentLength 2 2 +1.46%
R=golang-dev, rsc
CC=golang-dev, remy
https://golang.org/cl/6450092
Diffstat (limited to 'src/pkg/runtime/string.goc')
| -rw-r--r-- | src/pkg/runtime/string.goc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/pkg/runtime/string.goc b/src/pkg/runtime/string.goc index 7cab6d2417..b72a1aa5e7 100644 --- a/src/pkg/runtime/string.goc +++ b/src/pkg/runtime/string.goc @@ -204,6 +204,26 @@ func cmpstring(s1 String, s2 String) (v int32) { v = cmpstring(s1, s2); } +func eqstring(s1 String, s2 String) (v bool) { + uint32 i, l; + + if(s1.len != s2.len) { + v = false; + return; + } + if(s1.str == s2.str) { + v = true; + return; + } + l = s1.len; + for(i=0; i<l; i++) + if(s1.str[i] != s2.str[i]) { + v = false; + return; + } + v = true; +} + int32 runtime·strcmp(byte *s1, byte *s2) { |
