This commit is contained in:
liwei 2022-08-08 14:29:51 +08:00
commit b5a9eb2ccc

View File

@ -134,6 +134,47 @@ func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, w codecore.IWriter
w.PutReader(subIter)
}
func (this *sortKeysMapEncoder) EncodeToMapJson(ptr unsafe.Pointer, w codecore.IWriter) (ret map[string]string, err error) {
ret = make(map[string]string)
var (
k, v string
)
keystream := w.GetWriter()
elemstream := w.GetWriter()
defer func() {
w.PutWriter(keystream)
w.PutWriter(elemstream)
}()
iter := this.mapType.UnsafeIterate(ptr)
for i := 0; iter.HasNext(); i++ {
key, elem := iter.UnsafeNext()
if this.keyEncoder.GetType() != reflect.String {
this.keyEncoder.Encode(key, keystream)
if keystream.Error() != nil && keystream.Error() != io.EOF {
err = keystream.Error()
return
}
k = BytesToString(keystream.Buffer())
} else {
k = *((*string)(key))
}
if this.elemEncoder.GetType() != reflect.String {
this.elemEncoder.Encode(elem, elemstream)
if elemstream.Error() != nil && elemstream.Error() != io.EOF {
err = elemstream.Error()
return
}
v = BytesToString(elemstream.Buffer())
} else {
v = *((*string)(elem))
}
ret[k] = v
keystream.Reset()
elemstream.Reset()
}
return
}
func (encoder *sortKeysMapEncoder) IsEmpty(ptr unsafe.Pointer) bool {
iter := encoder.mapType.UnsafeIterate(ptr)
return !iter.HasNext()