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

Method SkipListOrSet

csharp/src/Fory/FieldSkipper.cs:326–370  ·  view source on GitHub ↗
(ReadContext context, TypeMetaFieldType fieldType)

Source from the content-addressed store, hash-verified

324 }
325
326 private static void SkipListOrSet(ReadContext context, TypeMetaFieldType fieldType)
327 {
328 if (fieldType.Generics.Count != 1)
329 {
330 throw new InvalidDataException("list/set field metadata must have one element type");
331 }
332
333 int length = checked((int)context.Reader.ReadVarUInt32());
334 if (length == 0)
335 {
336 return;
337 }
338
339 TypeMetaFieldType elementType = fieldType.Generics[0];
340 byte header = context.Reader.ReadUInt8();
341 bool trackRef = (header & CollectionBits.TrackingRef) != 0;
342 bool hasNull = (header & CollectionBits.HasNull) != 0;
343 bool declared = (header & CollectionBits.DeclaredElementType) != 0;
344 bool sameType = (header & CollectionBits.SameType) != 0;
345 RefMode elementRefMode = trackRef ? RefMode.Tracking : hasNull ? RefMode.NullOnly : RefMode.None;
346 if (!sameType)
347 {
348 for (int i = 0; i < length; i++)
349 {
350 _ = ReadInlineTypedValue(context, elementRefMode);
351 }
352
353 return;
354 }
355
356 TypeInfo? elementTypeInfo = null;
357 if (!declared)
358 {
359 elementTypeInfo = context.TypeResolver.ReadAnyTypeInfo(context);
360 }
361 else if (context.Compatible && HasInlineTypeInfo(elementType.TypeId))
362 {
363 elementTypeInfo = context.TypeResolver.ReadAnyTypeInfo(context);
364 }
365
366 for (int i = 0; i < length; i++)
367 {
368 SkipValue(context, elementType, elementRefMode, elementTypeInfo);
369 }
370 }
371
372 private static void SkipMap(ReadContext context, TypeMetaFieldType fieldType)
373 {

Callers

nothing calls this directly

Calls 3

ReadVarUInt32Method · 0.80
ReadUInt8Method · 0.80
ReadAnyTypeInfoMethod · 0.45

Tested by

no test coverage detected