Lex performance improvement (#176)
* Use []token instead of chan token name old time/op new time/op delta ParseToml-8 1.18ms ± 0% 0.91ms ± 0% -22.98% UnmarshalToml-8 1.29ms ± 0% 0.95ms ± 0% -25.96% name old alloc/op new alloc/op delta ParseToml-8 429kB ± 0% 444kB ± 0% +3.49% UnmarshalToml-8 451kB ± 0% 466kB ± 0% +3.32% name old allocs/op new allocs/op delta ParseToml-8 14.1k ± 0% 13.7k ± 0% -2.31% UnmarshalToml-8 15.1k ± 0% 14.7k ± 0% -2.16% * Lex on []byte instead of io.Reader name old time/op new time/op delta ParseToml-8 1.18ms ± 0% 0.29ms ± 0% -75.18% UnmarshalToml-8 1.27ms ± 0% 0.38ms ± 0% -70.38% name old alloc/op new alloc/op delta ParseToml-8 429kB ± 0% 135kB ± 0% -68.53% UnmarshalToml-8 451kB ± 0% 157kB ± 0% -65.22% name old allocs/op new allocs/op delta ParseToml-8 14.1k ± 0% 3.2k ± 0% -77.20% UnmarshalToml-8 15.1k ± 0% 4.2k ± 0% -72.00%
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"runtime"
|
||||
"strings"
|
||||
@@ -251,8 +252,8 @@ func (t *Tree) createSubTree(keys []string, pos Position) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadReader creates a Tree from any io.Reader.
|
||||
func LoadReader(reader io.Reader) (tree *Tree, err error) {
|
||||
// LoadBytes creates a Tree from a []byte.
|
||||
func LoadBytes(b []byte) (tree *Tree, err error) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
if _, ok := r.(runtime.Error); ok {
|
||||
@@ -261,13 +262,23 @@ func LoadReader(reader io.Reader) (tree *Tree, err error) {
|
||||
err = errors.New(r.(string))
|
||||
}
|
||||
}()
|
||||
tree = parseToml(lexToml(reader))
|
||||
tree = parseToml(lexToml(b))
|
||||
return
|
||||
}
|
||||
|
||||
// LoadReader creates a Tree from any io.Reader.
|
||||
func LoadReader(reader io.Reader) (tree *Tree, err error) {
|
||||
inputBytes, err := ioutil.ReadAll(reader)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
tree, err = LoadBytes(inputBytes)
|
||||
return
|
||||
}
|
||||
|
||||
// Load creates a Tree from a string.
|
||||
func Load(content string) (tree *Tree, err error) {
|
||||
return LoadReader(strings.NewReader(content))
|
||||
return LoadBytes([]byte(content))
|
||||
}
|
||||
|
||||
// LoadFile creates a Tree from a file.
|
||||
|
||||
Reference in New Issue
Block a user