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

Method ReadResolvedValue

csharp/src/Fory/FieldSkipper.cs:150–207  ·  view source on GitHub ↗
(ReadContext context, TypeInfo typeInfo, RefMode refMode)

Source from the content-addressed store, hash-verified

148 }
149
150 private static object? ReadResolvedValue(ReadContext context, TypeInfo typeInfo, RefMode refMode)
151 {
152 switch (refMode)
153 {
154 case RefMode.None:
155 return context.TypeResolver.ReadAnyValue(typeInfo, context);
156 case RefMode.NullOnly:
157 {
158 sbyte flag = context.Reader.ReadInt8();
159 if (flag == (sbyte)RefFlag.Null)
160 {
161 return null;
162 }
163
164 if (flag != (sbyte)RefFlag.NotNullValue)
165 {
166 throw new InvalidDataException($"unexpected nullOnly flag {flag}");
167 }
168
169 return context.TypeResolver.ReadAnyValue(typeInfo, context);
170 }
171 case RefMode.Tracking:
172 {
173 RefFlag flag = context.RefReader.ReadRefFlag(context.Reader);
174 switch (flag)
175 {
176 case RefFlag.Null:
177 return null;
178 case RefFlag.Ref:
179 {
180 uint refId = context.RefReader.ReadRefId(context.Reader);
181 return context.RefReader.GetRefValue(refId);
182 }
183 case RefFlag.RefValue:
184 {
185 uint reservedRefId = context.RefReader.ReserveRefId();
186 context.SetReservedRefId(reservedRefId);
187 try
188 {
189 object? value = context.TypeResolver.ReadAnyValue(typeInfo, context);
190 context.StoreRef(value);
191 return value;
192 }
193 finally
194 {
195 context.ClearReservedRefId();
196 }
197 }
198 case RefFlag.NotNullValue:
199 return context.TypeResolver.ReadAnyValue(typeInfo, context);
200 default:
201 throw new RefException($"invalid ref flag {(sbyte)flag}");
202 }
203 }
204 default:
205 throw new InvalidDataException($"unsupported ref mode {refMode}");
206 }
207 }

Callers

nothing calls this directly

Calls 9

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

Tested by

no test coverage detected