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

Method readSameType

go/fory/set.go:376–430  ·  view source on GitHub ↗

readSameType handles deserialization of sets where all elements share the same type

(ctx *ReadContext, buf *ByteBuffer, value reflect.Value, typeInfo *TypeInfo, flag int8, length int)

Source from the content-addressed store, hash-verified

374
375// readSameType handles deserialization of sets where all elements share the same type
376func (s setSerializer) readSameType(ctx *ReadContext, buf *ByteBuffer, value reflect.Value, typeInfo *TypeInfo, flag int8, length int) {
377 // Determine if reference tracking is enabled
378 trackRefs := (flag & CollectionTrackingRef) != 0
379 declaredGenerics := (flag & CollectionIsDeclElementType) != 0
380 hasNull := (flag & CollectionHasNull) != 0
381 serializer := s.elemSerializer
382 keyType := value.Type().Key()
383 elemType := keyType
384 if !declaredGenerics && typeInfo != nil && typeInfo.Serializer != nil {
385 serializer = typeInfo.Serializer
386 if typeInfo.Type != nil {
387 elemType, serializer = wrapMapSerializerIfNeeded(keyType, typeInfo.Type, serializer)
388 }
389 }
390 if keyType.Kind() != reflect.Ptr {
391 if ptrSer, ok := serializer.(*ptrToValueSerializer); ok {
392 serializer = ptrSer.valueSerializer
393 }
394 }
395 declaredGenericDispatch := declaredGenerics && serializerNeedsGenericDispatch(serializer)
396
397 elemRefMode := RefModeNone
398 if trackRefs {
399 elemRefMode = RefModeTracking
400 }
401
402 for i := 0; i < length; i++ {
403 elem := reflect.New(elemType).Elem()
404 if trackRefs {
405 serializer.Read(ctx, elemRefMode, false, declaredGenericDispatch, elem)
406 if ctx.HasError() {
407 return
408 }
409 if isNull(elem) {
410 continue
411 }
412 } else if hasNull {
413 refFlag := buf.ReadInt8(ctx.Err())
414 if refFlag == NullFlag {
415 continue
416 }
417 readSerializerData(ctx, serializer, declaredGenericDispatch, elem)
418 if ctx.HasError() {
419 return
420 }
421 } else {
422 readSerializerData(ctx, serializer, declaredGenericDispatch, elem)
423 if ctx.HasError() {
424 return
425 }
426 }
427 // Add element to set
428 setMapKey(value, elem, keyType)
429 }
430}
431
432// readDifferentTypes handles deserialization of sets with mixed element types
433func (s setSerializer) readDifferentTypes(ctx *ReadContext, buf *ByteBuffer, value reflect.Value, length int, flag int8) {

Callers 1

ReadDataMethod · 0.95

Calls 11

isNullFunction · 0.85
readSerializerDataFunction · 0.85
setMapKeyFunction · 0.85
KindMethod · 0.80
ReadMethod · 0.65
TypeMethod · 0.45
HasErrorMethod · 0.45
ReadInt8Method · 0.45
ErrMethod · 0.45

Tested by

no test coverage detected