aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/strings/replace.go
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-06-19 20:10:55 -0700
committerRui Ueyama <ruiu@google.com>2014-06-19 20:10:55 -0700
commit26282e4093fcf34738483ed837c1b97a54bb059d (patch)
tree0af3b934aa420cac235a0f3ab6040b9c6761af70 /src/pkg/strings/replace.go
parent24f8919aafa476a4730184bd4dc743a7a76e62ff (diff)
downloadgo-26282e4093fcf34738483ed837c1b97a54bb059d.tar.xz
strings: define byteBitmap.isSet
LGTM=dave R=golang-codereviews, bradfitz, dave CC=golang-codereviews https://golang.org/cl/109090048
Diffstat (limited to 'src/pkg/strings/replace.go')
-rw-r--r--src/pkg/strings/replace.go18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/pkg/strings/replace.go b/src/pkg/strings/replace.go
index c661265613..03fb6b249d 100644
--- a/src/pkg/strings/replace.go
+++ b/src/pkg/strings/replace.go
@@ -26,6 +26,10 @@ func (m *byteBitmap) set(b byte) {
m[b>>5] |= uint32(1 << (b & 31))
}
+func (m *byteBitmap) isSet(b byte) bool {
+ return m[b>>5]&uint32(1<<(b&31)) != 0
+}
+
// NewReplacer returns a new Replacer from a list of old, new string pairs.
// Replacements are performed in order, without overlapping matches.
func NewReplacer(oldnew ...string) *Replacer {
@@ -51,7 +55,7 @@ func NewReplacer(oldnew ...string) *Replacer {
bb := &byteReplacer{}
for i := 0; i < len(oldnew); i += 2 {
o, n := oldnew[i][0], oldnew[i+1][0]
- if bb.old[o>>5]&uint32(1<<(o&31)) != 0 {
+ if bb.old.isSet(o) {
// Later old->new maps do not override previous ones with the same old string.
continue
}
@@ -64,7 +68,7 @@ func NewReplacer(oldnew ...string) *Replacer {
bs := &byteStringReplacer{}
for i := 0; i < len(oldnew); i += 2 {
o, new := oldnew[i][0], oldnew[i+1]
- if bs.old[o>>5]&uint32(1<<(o&31)) != 0 {
+ if bs.old.isSet(o) {
// Later old->new maps do not override previous ones with the same old string.
continue
}
@@ -431,7 +435,7 @@ func (r *byteReplacer) Replace(s string) string {
var buf []byte // lazily allocated
for i := 0; i < len(s); i++ {
b := s[i]
- if r.old[b>>5]&uint32(1<<(b&31)) != 0 {
+ if r.old.isSet(b) {
if buf == nil {
buf = []byte(s)
}
@@ -456,7 +460,7 @@ func (r *byteReplacer) WriteString(w io.Writer, s string) (n int, err error) {
ncopy := copy(buf, s[:])
s = s[ncopy:]
for i, b := range buf[:ncopy] {
- if r.old[b>>5]&uint32(1<<(b&31)) != 0 {
+ if r.old.isSet(b) {
buf[i] = r.new[b]
}
}
@@ -486,7 +490,7 @@ func (r *byteStringReplacer) Replace(s string) string {
anyChanges := false
for i := 0; i < len(s); i++ {
b := s[i]
- if r.old[b>>5]&uint32(1<<(b&31)) != 0 {
+ if r.old.isSet(b) {
anyChanges = true
newSize += len(r.new[b])
} else {
@@ -500,7 +504,7 @@ func (r *byteStringReplacer) Replace(s string) string {
bi := buf
for i := 0; i < len(s); i++ {
b := s[i]
- if r.old[b>>5]&uint32(1<<(b&31)) != 0 {
+ if r.old.isSet(b) {
n := copy(bi, r.new[b])
bi = bi[n:]
} else {
@@ -516,7 +520,7 @@ func (r *byteStringReplacer) WriteString(w io.Writer, s string) (n int, err erro
last := 0
for i := 0; i < len(s); i++ {
b := s[i]
- if r.old[b>>5]&uint32(1<<(b&31)) == 0 {
+ if !r.old.isSet(b) {
continue
}
if last != i {