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

wrap object

This commit is contained in:
Tao Wen
2017-01-28 22:45:03 +08:00
parent 64c9bd0b1c
commit 95823d0bf1
4 changed files with 454 additions and 7 deletions

View File

@ -296,11 +296,10 @@ type arrayAny struct {
err error
cache []Any
val reflect.Value
parsedTo int
}
func wrapArray(val interface{}) *arrayAny {
return &arrayAny{baseAny{}, nil, nil, reflect.ValueOf(val), 0}
return &arrayAny{baseAny{}, nil, nil, reflect.ValueOf(val)}
}
func (any *arrayAny) ValueType() ValueType {
@ -373,7 +372,7 @@ func (any *arrayAny) ToFloat64() float64 {
}
func (any *arrayAny) ToString() string {
if any.parsedTo == 0 {
if len(any.cache) == 0 {
// nothing has been parsed yet
str, err := MarshalToString(any.val.Interface())
any.err = err
@ -390,7 +389,7 @@ func (any *arrayAny) fillCacheUntil(idx int) Any {
if idx < len(any.cache) {
return any.cache[idx]
} else {
for i := any.parsedTo; i < any.val.Len(); i++ {
for i := len(any.cache); i < any.val.Len(); i++ {
element := Wrap(any.val.Index(i).Interface())
any.cache = append(any.cache, element)
if idx == i {
@ -464,7 +463,7 @@ func (any *arrayAny) SetArray(newList []Any) bool {
}
func (any *arrayAny) WriteTo(stream *Stream) {
if any.parsedTo == 0 {
if len(any.cache) == 0 {
// nothing has been parsed yet
stream.WriteVal(any.val)
} else {