in memstore/common/data_value.go [621:729]
func (av *ArrayValue) Write(writer *utils.BufferWriter) error {
num := av.GetLength()
err := writer.AppendUint32(uint32(num))
if err != nil {
return err
}
// add value for each item
for _, val := range av.Items {
switch av.DataType {
case Bool:
if val == nil {
err = writer.AppendBool(false)
} else {
err = writer.AppendBool(val.(bool))
}
case Int8:
if val == nil {
err = writer.AppendInt8(0)
} else {
err = writer.AppendInt8(val.(int8))
}
case Uint8, SmallEnum:
if val == nil {
err = writer.AppendUint8(0)
} else {
err = writer.AppendUint8(val.(uint8))
}
case Int16:
if val == nil {
err = writer.AppendInt16(0)
} else {
err = writer.AppendInt16(val.(int16))
}
case Uint16, BigEnum:
if val == nil {
err = writer.AppendUint16(0)
} else {
err = writer.AppendUint16(val.(uint16))
}
case Int32:
if val == nil {
err = writer.AppendInt32(0)
} else {
err = writer.AppendInt32(val.(int32))
}
case Uint32:
if val == nil {
err = writer.AppendUint32(0)
} else {
err = writer.AppendUint32(val.(uint32))
}
case Float32:
if val == nil {
err = writer.AppendFloat32(0)
} else {
err = writer.AppendFloat32(val.(float32))
}
case Int64:
if val == nil {
err = writer.AppendInt64(0)
} else {
err = writer.AppendInt64(val.(int64))
}
case UUID:
if val == nil {
err = writer.AppendUint64(0)
if err == nil {
err = writer.AppendUint64(0)
}
} else {
err := writer.AppendUint64(val.([2]uint64)[0])
if err == nil {
err = writer.AppendUint64(val.([2]uint64)[1])
}
}
case GeoPoint:
if val == nil {
err = writer.AppendFloat32(0)
if err == nil {
err = writer.AppendFloat32(0)
}
} else {
err := writer.AppendFloat32(val.([2]float32)[0])
if err == nil {
err = writer.AppendFloat32(val.([2]float32)[1])
}
}
}
if err != nil {
return err
}
}
writer.AlignBytes(1)
// add validity bit for each item
for _, val := range av.Items {
if val == nil {
err = writer.AppendBool(false)
} else {
err = writer.AppendBool(true)
}
if err != nil {
return err
}
}
writer.AlignBytes(8)
return nil
}