MCPcopy Create free account
hub / github.com/apache/fory / writeOptionFast

Function writeOptionFast

go/fory/struct.go:882–1312  ·  view source on GitHub ↗
(ctx *WriteContext, field *FieldInfo, optPtr unsafe.Pointer)

Source from the content-addressed store, hash-verified

880}
881
882func writeOptionFast(ctx *WriteContext, field *FieldInfo, optPtr unsafe.Pointer) bool {
883 buf := ctx.Buffer()
884 has := *(*bool)(unsafe.Add(optPtr, field.Meta.OptionalInfo.hasOffset))
885 valuePtr := unsafe.Add(optPtr, field.Meta.OptionalInfo.valueOffset)
886 switch field.DispatchId {
887 case StringDispatchId:
888 if field.RefMode != RefModeNone {
889 if !has {
890 buf.WriteInt8(NullFlag)
891 return true
892 }
893 buf.WriteInt8(NotNullValueFlag)
894 } else if !has {
895 ctx.WriteString("")
896 return true
897 }
898 if has {
899 ctx.WriteString(*(*string)(valuePtr))
900 } else {
901 ctx.WriteString("")
902 }
903 return true
904 case NullableTaggedInt64DispatchId:
905 if field.RefMode == RefModeNone {
906 if has {
907 buf.WriteTaggedInt64(*(*int64)(valuePtr))
908 } else {
909 buf.WriteTaggedInt64(0)
910 }
911 return true
912 }
913 if !has {
914 buf.WriteInt8(NullFlag)
915 return true
916 }
917 buf.WriteInt8(NotNullValueFlag)
918 buf.WriteTaggedInt64(*(*int64)(valuePtr))
919 return true
920 case NullableTaggedUint64DispatchId:
921 if field.RefMode == RefModeNone {
922 if has {
923 buf.WriteTaggedUint64(*(*uint64)(valuePtr))
924 } else {
925 buf.WriteTaggedUint64(0)
926 }
927 return true
928 }
929 if !has {
930 buf.WriteInt8(NullFlag)
931 return true
932 }
933 buf.WriteInt8(NotNullValueFlag)
934 buf.WriteTaggedUint64(*(*uint64)(valuePtr))
935 return true
936 case NullableBoolDispatchId:
937 if field.RefMode == RefModeNone {
938 if has {
939 buf.WriteBool(*(*bool)(valuePtr))

Callers 1

writeRemainingFieldMethod · 0.85

Calls 15

WriteTaggedUint64Method · 0.80
WriteBoolMethod · 0.80
WriteUint8Method · 0.80
WriteUint16Method · 0.80
WriteUint32Method · 0.80
WriteUint64Method · 0.80
WriteVarUint64Method · 0.80
int64Function · 0.50
uint64Function · 0.50
BufferMethod · 0.45
AddMethod · 0.45
WriteInt8Method · 0.45

Tested by

no test coverage detected