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

Function readOptionFast

go/fory/struct.go:2007–2308  ·  view source on GitHub ↗
(ctx *ReadContext, field *FieldInfo, optPtr unsafe.Pointer)

Source from the content-addressed store, hash-verified

2005}
2006
2007func readOptionFast(ctx *ReadContext, field *FieldInfo, optPtr unsafe.Pointer) bool {
2008 buf := ctx.Buffer()
2009 err := ctx.Err()
2010 hasPtr := (*bool)(unsafe.Add(optPtr, field.Meta.OptionalInfo.hasOffset))
2011 valuePtr := unsafe.Add(optPtr, field.Meta.OptionalInfo.valueOffset)
2012 switch field.DispatchId {
2013 case StringDispatchId:
2014 if field.RefMode != RefModeNone {
2015 flag := buf.ReadInt8(err)
2016 if flag == NullFlag {
2017 *hasPtr = false
2018 *(*string)(valuePtr) = ""
2019 return true
2020 }
2021 }
2022 *hasPtr = true
2023 *(*string)(valuePtr) = ctx.ReadString()
2024 return true
2025 case NullableTaggedInt64DispatchId:
2026 if field.RefMode != RefModeNone {
2027 flag := buf.ReadInt8(err)
2028 if flag == NullFlag {
2029 *hasPtr = false
2030 *(*int64)(valuePtr) = 0
2031 return true
2032 }
2033 }
2034 *hasPtr = true
2035 *(*int64)(valuePtr) = buf.ReadTaggedInt64(err)
2036 return true
2037 case NullableTaggedUint64DispatchId:
2038 if field.RefMode != RefModeNone {
2039 flag := buf.ReadInt8(err)
2040 if flag == NullFlag {
2041 *hasPtr = false
2042 *(*uint64)(valuePtr) = 0
2043 return true
2044 }
2045 }
2046 *hasPtr = true
2047 *(*uint64)(valuePtr) = buf.ReadTaggedUint64(err)
2048 return true
2049 case NullableBoolDispatchId:
2050 if field.RefMode != RefModeNone {
2051 flag := buf.ReadInt8(err)
2052 if flag == NullFlag {
2053 *hasPtr = false
2054 *(*bool)(valuePtr) = false
2055 return true
2056 }
2057 }
2058 *hasPtr = true
2059 *(*bool)(valuePtr) = buf.ReadBool(err)
2060 return true
2061 case NullableInt8DispatchId:
2062 if field.RefMode != RefModeNone {
2063 flag := buf.ReadInt8(err)
2064 if flag == NullFlag {

Callers 1

readRemainingFieldMethod · 0.85

Calls 15

ReadTaggedUint64Method · 0.80
ReadUint8Method · 0.80
ReadUint16Method · 0.80
ReadUint32Method · 0.80
ReadUint64Method · 0.80
ReadVarUint64Method · 0.80
BufferMethod · 0.45
ErrMethod · 0.45
AddMethod · 0.45
ReadInt8Method · 0.45
ReadStringMethod · 0.45
ReadTaggedInt64Method · 0.45

Tested by

no test coverage detected