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

Method Read

csharp/src/Fory/AnySerializer.cs:80–117  ·  view source on GitHub ↗
(ReadContext context, RefMode refMode, bool readTypeInfo)

Source from the content-addressed store, hash-verified

78 }
79
80 public override object? Read(ReadContext context, RefMode refMode, bool readTypeInfo)
81 {
82 if (refMode != RefMode.None)
83 {
84 RefFlag flag = context.RefReader.ReadRefFlag(context.Reader);
85 switch (flag)
86 {
87 case RefFlag.Null:
88 return null;
89 case RefFlag.Ref:
90 {
91 uint refId = context.RefReader.ReadRefId(context.Reader);
92 return context.RefReader.GetRefValue(refId);
93 }
94 case RefFlag.RefValue:
95 {
96 uint reservedRefId = context.RefReader.ReserveRefId();
97 context.SetReservedRefId(reservedRefId);
98 try
99 {
100 object? value = ReadNonNullDynamicAny(context, readTypeInfo);
101 context.StoreRef(value);
102 return value;
103 }
104 finally
105 {
106 context.ClearReservedRefId();
107 }
108 }
109 case RefFlag.NotNullValue:
110 break;
111 default:
112 throw new RefException($"invalid ref flag {(sbyte)flag}");
113 }
114 }
115
116 return ReadNonNullDynamicAny(context, readTypeInfo);
117 }
118
119 private static bool AnyValueIsRefType(object value, TypeResolver typeResolver)
120 {

Callers

nothing calls this directly

Calls 7

ReadRefIdMethod · 0.80
GetRefValueMethod · 0.80
SetReservedRefIdMethod · 0.80
StoreRefMethod · 0.80
ClearReservedRefIdMethod · 0.80
ReadRefFlagMethod · 0.45
ReserveRefIdMethod · 0.45

Tested by

no test coverage detected