aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/strings/replace.go
AgeCommit message (Collapse)Author
2014-09-08build: move package sources from src/pkg to srcRuss Cox
Preparation was in CL 134570043. This CL contains only the effect of 'hg mv src/pkg/* src'. For more about the move, see golang.org/s/go14nopkg.
2014-07-17strings: remove byteBitmapRui Ueyama
Previously we had a bitmap to check whether or not a byte appears in a string should be replaced. But we don't actually need a separate bitmap for that purpose. Removing the bitmap makes the code simpler. LGTM=dave, iant, nigeltao R=golang-codereviews, dave, gobot, nigeltao, iant, bradfitz, rsc CC=golang-codereviews https://golang.org/cl/110100043
2014-06-28strings: Replacer is safe for concurrent useEvan Shaw
LGTM=r R=golang-codereviews, bradfitz, r CC=golang-codereviews https://golang.org/cl/109220044
2014-06-22undo CL 101330053 / c19c9a063fe8Rui Ueyama
sync.Pool is not supposed to be used everywhere, but is a last resort. ««« original CL description strings: use sync.Pool to cache buffer benchmark old ns/op new ns/op delta BenchmarkByteReplacerWriteString 3596 3094 -13.96% benchmark old allocs new allocs delta BenchmarkByteReplacerWriteString 1 0 -100.00% LGTM=dvyukov R=bradfitz, dave, dvyukov CC=golang-codereviews https://golang.org/cl/101330053 »»» LGTM=dave R=r, dave CC=golang-codereviews https://golang.org/cl/102610043
2014-06-21strings: use sync.Pool to cache bufferRui Ueyama
benchmark old ns/op new ns/op delta BenchmarkByteReplacerWriteString 3596 3094 -13.96% benchmark old allocs new allocs delta BenchmarkByteReplacerWriteString 1 0 -100.00% LGTM=dvyukov R=bradfitz, dave, dvyukov CC=golang-codereviews https://golang.org/cl/101330053
2014-06-20strings: speed up byteReplacer.ReplaceRui Ueyama
benchmark old ns/op new ns/op delta BenchmarkByteReplacerWriteString 7359 3661 -50.25% LGTM=dave R=golang-codereviews, dave CC=golang-codereviews https://golang.org/cl/102550043
2014-06-19strings: define byteBitmap.isSetRui Ueyama
LGTM=dave R=golang-codereviews, bradfitz, dave CC=golang-codereviews https://golang.org/cl/109090048
2014-06-19strings: reduce allocation in byteStringReplacer.WriteStringRui Ueyama
Use WriteString instead of allocating a byte slice as a buffer. This was a TODO. benchmark old ns/op new ns/op delta BenchmarkWriteString 40139 19991 -50.20% LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/107190044
2014-06-17strings: add fast path to ReplaceRui Ueyama
genericReplacer.lookup is called for each byte of an input string. In many (most?) cases, lookup will fail for the first byte, and it will return immediately. Adding a fast path for that case seems worth it. Benchmark on my Xeon 3.5GHz Linux box: benchmark old ns/op new ns/op delta BenchmarkGenericNoMatch 2691 774 -71.24% BenchmarkGenericMatch1 7920 8151 +2.92% BenchmarkGenericMatch2 52336 39927 -23.71% BenchmarkSingleMaxSkipping 1575 1575 +0.00% BenchmarkSingleLongSuffixFail 1429 1429 +0.00% BenchmarkSingleMatch 56228 55444 -1.39% BenchmarkByteByteNoMatch 568 568 +0.00% BenchmarkByteByteMatch 977 972 -0.51% BenchmarkByteStringMatch 1669 1687 +1.08% BenchmarkHTMLEscapeNew 422 422 +0.00% BenchmarkHTMLEscapeOld 692 670 -3.18% BenchmarkByteByteReplaces 8492 8474 -0.21% BenchmarkByteByteMap 2817 2808 -0.32% LGTM=rsc R=golang-codereviews, bradfitz, dave, rsc CC=golang-codereviews https://golang.org/cl/79200044
2014-03-23strings: minor cleanupRui Ueyama
bi is a slice and not an array, so bi[:] does not make much sense. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/79280043
2013-10-24strings: fix Replacer bug with prefix matchesBrad Fitzpatrick
singleStringReplacer had a bug where if a string was replaced at the beginning and no output had yet been produced into the temp buffer before matching ended, an invalid nil check (used as a proxy for having matched anything) meant it always returned its input. Fixes #6659 R=golang-dev, r CC=golang-dev https://golang.org/cl/16880043
2012-09-28strings: implement a faster single-string ReplacerEric Roshan-Eisner
The string searching is implemented separately so other functions may make use of it in the future. benchmark old ns/op new ns/op delta BenchmarkSingleMaxSkipping 125889 2474 -98.03% BenchmarkSingleLongSuffixFail 16252 1996 -87.72% BenchmarkSingleMatch 260793 136266 -47.75% benchmark old MB/s new MB/s speedup BenchmarkSingleMaxSkipping 79.43 4041.57 50.88x BenchmarkSingleLongSuffixFail 61.65 501.81 8.14x BenchmarkSingleMatch 57.52 110.08 1.91x R=nigeltao CC=golang-dev https://golang.org/cl/6545049
2012-09-17strings: implement a faster generic ReplacerEric Eisner
This also fixes the semantics of some corner cases with the empty match. TODOs for genericReplacer in the tests are fixed. benchmark old ns/op new ns/op delta BenchmarkGenericNoMatch 71395 3132 -95.61% BenchmarkGenericMatch1 75610 20280 -73.18% BenchmarkGenericMatch2 837995 86725 -89.65% R=nigeltao, rsc CC=golang-dev https://golang.org/cl/6492076
2012-09-12strings: fix NewReplacer(old0, new0, old1, new1, ...) to be consistentNigel Tao
when oldi == oldj. Benchmark numbers show no substantial change. R=eric.d.eisner, rogpeppe CC=golang-dev https://golang.org/cl/6496104
2011-11-01src/pkg/[n-z]*: gofix -r error -force=errorRuss Cox
R=golang-dev, bsiegert, iant CC=golang-dev https://golang.org/cl/5294074
2011-10-03strings: implement a faster byte->string ReplacerBrad Fitzpatrick
This implements a replacer for when all old strings are single bytes, but new values are not. BenchmarkHTMLEscapeNew 1000000 1090 ns/op BenchmarkHTMLEscapeOld 1000000 2049 ns/op R=rsc CC=golang-dev https://golang.org/cl/5176043
2011-10-03strings: implement a faster byte->byte ReplacerBrad Fitzpatrick
When all old & new string values are single bytes, byteReplacer is now used, instead of the generic algorithm. BenchmarkGenericMatch 10000 102519 ns/op BenchmarkByteByteMatch 1000000 2178 ns/op fast path, when nothing matches: BenchmarkByteByteNoMatch 1000000 1109 ns/op comparisons to multiple Replace calls: BenchmarkByteByteReplaces 100000 16164 ns/op comparison to strings.Map: BenchmarkByteByteMap 500000 5454 ns/op R=rsc CC=golang-dev https://golang.org/cl/5175050
2011-09-28strings: add Replacer, NewReplacerBrad Fitzpatrick
This is just a new API to do many replacements at once. While the point of this API is to be faster than doing replacements one at a time, the implementation in this CL has the optimizations removed and may actually be slower. Future CLs will bring back & add optimizations. R=r, rsc, rogpeppe CC=golang-dev https://golang.org/cl/5081042