1
0
mirror of https://github.com/json-iterator/go.git synced 2025-06-15 22:50:24 +02:00

expose Parse from Any

This commit is contained in:
Tao Wen
2017-01-26 15:40:38 +08:00
parent 4d7e181f9f
commit 97472ecd96
9 changed files with 84 additions and 39 deletions

View File

@ -13,7 +13,7 @@ type arrayLazyAny struct {
remaining []byte
}
func (any *arrayLazyAny) parse() *Iterator {
func (any *arrayLazyAny) Parse() *Iterator {
iter := any.iter
if iter == nil {
iter = NewIterator()
@ -37,7 +37,7 @@ func (any *arrayLazyAny) fillCacheUntil(target int) Any {
if target < i {
return any.cache[target]
}
iter := any.parse()
iter := any.Parse()
if (len(any.remaining) == len(any.buf)) {
iter.head++
c := iter.nextToken()
@ -47,11 +47,13 @@ func (any *arrayLazyAny) fillCacheUntil(target int) Any {
any.cache = append(any.cache, element)
if target == 0 {
any.remaining = iter.buf[iter.head:]
any.err = iter.Error
return element
}
i = 1
} else {
any.remaining = nil
any.err = iter.Error
return nil
}
}
@ -60,11 +62,13 @@ func (any *arrayLazyAny) fillCacheUntil(target int) Any {
any.cache = append(any.cache, element)
if i == target {
any.remaining = iter.buf[iter.head:]
any.err = iter.Error
return element
}
i++
}
}
any.remaining = nil
any.err = iter.Error
return nil
}
@ -75,7 +79,7 @@ func (any *arrayLazyAny) fillCache() {
if any.cache == nil {
any.cache = make([]Any, 0, 8)
}
iter := any.parse()
iter := any.Parse()
if len(any.remaining) == len(any.buf) {
iter.head++
c := iter.nextToken()
@ -84,6 +88,7 @@ func (any *arrayLazyAny) fillCache() {
any.cache = append(any.cache, iter.readAny(iter))
} else {
any.remaining = nil
any.err = iter.Error
return
}
}
@ -91,7 +96,7 @@ func (any *arrayLazyAny) fillCache() {
any.cache = append(any.cache, iter.readAny(iter))
}
any.remaining = nil
return
any.err = iter.Error
}
func (any *arrayLazyAny) LastError() error {
@ -185,14 +190,13 @@ func (any *arrayLazyAny) Size() int {
return len(any.cache)
}
func (any *arrayLazyAny) IterateArray() (func() (Any, bool), bool) {
if any.cache == nil {
any.cache = make([]Any, 0, 8)
}
remaining := any.remaining
if len(remaining) == len(any.buf) {
iter := any.parse()
iter := any.Parse()
iter.head++
c := iter.nextToken()
if c != ']' {
@ -204,6 +208,7 @@ func (any *arrayLazyAny) IterateArray() (func() (Any, bool), bool) {
} else {
remaining = nil
any.remaining = nil
any.err = iter.Error
return nil, false
}
}
@ -234,18 +239,18 @@ func (any *arrayLazyAny) IterateArray() (func() (Any, bool), bool) {
any.cache = append(any.cache, nextValue)
remaining = iter.buf[iter.head:]
any.remaining = remaining
any.err = iter.Error
return value, true
} else {
remaining = nil
any.remaining = nil
any.err = iter.Error
return value, false
}
}
}, true
}
func (any *arrayLazyAny) GetArray() []Any {
any.fillCache()
return any.cache