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

Method readFieldsInOrder

go/fory/struct.go:2313–2429  ·  view source on GitHub ↗

readFieldsInOrder reads fields in the order they appear in s.fields (TypeDef order) This is used in compatible mode where Java writes fields in TypeDef order Precondition: value.CanAddr() must be true (checked by caller)

(ctx *ReadContext, value reflect.Value)

Source from the content-addressed store, hash-verified

2311// This is used in compatible mode where Java writes fields in TypeDef order
2312// Precondition: value.CanAddr() must be true (checked by caller)
2313func (s *structSerializer) readFieldsInOrder(ctx *ReadContext, value reflect.Value) {
2314 buf := ctx.Buffer()
2315 ptr := unsafe.Pointer(value.UnsafeAddr())
2316 err := ctx.Err()
2317 for i := 0; i < len(s.fields); i++ {
2318 field := &s.fields[i]
2319 switch field.ReadAction {
2320 case remoteFieldReadSkip:
2321 s.skipField(ctx, field)
2322 if ctx.HasError() {
2323 return
2324 }
2325 continue
2326 case remoteFieldReadExactFixed:
2327 i = readExactFixedPrimitiveRun(ctx, s.fields, i, ptr) - 1
2328 continue
2329 case remoteFieldReadExactVarint:
2330 i = readExactVarintPrimitiveRun(ctx, s.fields, i, ptr) - 1
2331 continue
2332 case remoteFieldReadCompatibleScalar:
2333 readCompatibleScalarField(ctx, field, unsafe.Add(ptr, field.Offset))
2334 if ctx.HasError() {
2335 return
2336 }
2337 continue
2338 case remoteFieldReadExactRemaining:
2339 s.readRemainingField(ctx, ptr, field, value)
2340 continue
2341 }
2342
2343 fieldPtr := unsafe.Add(ptr, field.Offset)
2344 optInfo := optionalInfo{}
2345 if field.Kind == FieldKindOptional {
2346 optInfo = field.Meta.OptionalInfo
2347 }
2348
2349 switch field.ReadAction {
2350 case remoteFieldReadExactNullableFixed:
2351 refFlag := buf.ReadInt8(err)
2352 if refFlag == NullFlag {
2353 clearFieldValue(field.Kind, fieldPtr, optInfo)
2354 continue
2355 }
2356 // Read fixed-size value based on dispatch ID
2357 switch field.DispatchId {
2358 case NullableBoolDispatchId:
2359 storeFieldValue(field.Kind, fieldPtr, optInfo, buf.ReadBool(err))
2360 case NullableInt8DispatchId:
2361 storeFieldValue(field.Kind, fieldPtr, optInfo, buf.ReadInt8(err))
2362 case NullableUint8DispatchId:
2363 storeFieldValue(field.Kind, fieldPtr, optInfo, uint8(buf.ReadInt8(err)))
2364 case NullableInt16DispatchId:
2365 storeFieldValue(field.Kind, fieldPtr, optInfo, buf.ReadInt16(err))
2366 case NullableUint16DispatchId:
2367 storeFieldValue(field.Kind, fieldPtr, optInfo, buf.ReadUint16(err))
2368 case NullableInt32DispatchId:
2369 storeFieldValue(field.Kind, fieldPtr, optInfo, buf.ReadInt32(err))
2370 case NullableUint32DispatchId:

Callers 1

ReadDataMethod · 0.95

Calls 15

skipFieldMethod · 0.95
readRemainingFieldMethod · 0.95
clearFieldValueFunction · 0.85
storeFieldValueFunction · 0.85
readEnumFieldUnsafeFunction · 0.85
ReadUint16Method · 0.80
ReadUint32Method · 0.80
ReadUint64Method · 0.80
ReadVarUint64Method · 0.80

Tested by

no test coverage detected