(ctx *ReadContext, field *FieldInfo, optPtr unsafe.Pointer)
| 2005 | } |
| 2006 | |
| 2007 | func 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 { |
no test coverage detected