Skip to content

Commit

Permalink
Merge pull request #21 from tdakkota/feat/inline-read-to-consume
Browse files Browse the repository at this point in the history
feat: inline read and match to consume
  • Loading branch information
ernado committed Jan 15, 2022
2 parents 9ff8bd0 + 54b4306 commit 0493760
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 15 deletions.
36 changes: 21 additions & 15 deletions dec.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,21 +170,27 @@ var spaceSet = [256]byte{
}

func (d *Decoder) consume(c byte) (err error) {
buf := d.buf[d.head:d.tail]
var got byte
if len(buf) > 0 && spaceSet[buf[0]] == 0 {
d.head++
got = buf[0]
} else {
got, err = d.more()
if err != nil {
for {
buf := d.buf[d.head:d.tail]
for i, got := range buf {
switch spaceSet[got] {
default:
d.head += i + 1
if c != got {
return badToken(got)
}
return nil
case 1:
continue
}
}
if err = d.read(); err != nil {
if err == io.EOF {
return io.ErrUnexpectedEOF
}
return err
}
}
if c != got {
return badToken(got)
}
return nil
}

// more is next but io.EOF is unexpected.
Expand All @@ -201,12 +207,12 @@ func (d *Decoder) next() (byte, error) {
for {
buf := d.buf[d.head:d.tail]
for i, c := range buf {
switch c {
case ' ', '\n', '\t', '\r':
continue
switch spaceSet[c] {
default:
d.head += i + 1
return c, nil
case 1:
continue
}
}
if err := d.read(); err != nil {
Expand Down
1 change: 1 addition & 0 deletions testdata/tiny.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"x":0}

0 comments on commit 0493760

Please sign in to comment.