From: Rui Ueyama Date: Fri, 20 Jun 2014 03:10:55 +0000 (-0700) Subject: strings: define byteBitmap.isSet X-Git-Tag: go1.4beta1~1254 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=26282e4093fcf34738483ed837c1b97a54bb059d;p=gostls13.git strings: define byteBitmap.isSet LGTM=dave R=golang-codereviews, bradfitz, dave CC=golang-codereviews https://golang.org/cl/109090048 --- 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 {