Skip to content

Commit

Permalink
Use bytes.IndexByte() in ignoreComment() to find first '-'
Browse files Browse the repository at this point in the history
  • Loading branch information
kaiburjack committed Aug 14, 2022
1 parent 4b6ddef commit f1bed47
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 22 deletions.
35 changes: 35 additions & 0 deletions combined_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,41 @@ func BenchmarkLotsOfText(b *testing.B) {
}
}

func BenchmarkWithSkippedWhitespace(b *testing.B) {
r := strings.NewReader(
`
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="https://www.w3schools.com/prices">
<!-- we want to add a <m:Item>Apples</m:Item> here -->
</m:GetPrice>
</soap:Body>
</soap:Envelope>`)
dec := gosaxml.NewDecoder(r)
enc := gosaxml.NewEncoder(io.Discard, gosaxml.NewNamespaceModifier())
var tk gosaxml.Token

b.ReportAllocs()
b.ResetTimer()

for i := 0; i < b.N; i++ {
_, err := r.Seek(0, io.SeekStart)
assert.Nil(b, err)
dec.Reset(r)
for {
err = dec.NextToken(&tk)
if err == io.EOF {
break
}
assert.Nil(b, err)
err = enc.EncodeToken(&tk)
assert.Nil(b, err)
}
}
}

func decodeEncode(t *testing.T, dec gosaxml.Decoder, enc *gosaxml.Encoder, tk *gosaxml.Token) {
for {
err := dec.NextToken(tk)
Expand Down
52 changes: 30 additions & 22 deletions decoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -276,32 +276,40 @@ func (thiz *decoder) ignoreComment() error {
return err
}
for {
var b byte
b, err = thiz.readByte()
if err != nil {
return err
}
if b == '-' {
var b2 byte
b2, err = thiz.readByte()
if err != nil {
return err
}
if b2 == '-' {
for {
var b3 byte
b3, err = thiz.readByte()
if err != nil {
return err
}
if b3 == '>' {
return nil
} else if b3 != '-' {
break
for thiz.w > thiz.r {
k := bytes.IndexByte(thiz.rb[thiz.r:thiz.w], '-')
if k > -1 {
_, err = thiz.discard(k + 1)
if err != nil {
return err
}
var b2 byte
b2, err = thiz.readByte()
if err != nil {
return err
}
if b2 == '-' {
for {
var b3 byte
b3, err = thiz.readByte()
if err != nil {
return err
}
if b3 == '>' {
return nil
} else if b3 != '-' {
break
}
}
}
} else {
thiz.discardBuffer()
}
}
err := thiz.read0()
if err != nil {
return err
}
}
}

Expand Down

0 comments on commit f1bed47

Please sign in to comment.