func()

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
}