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

Method ReadData

go/fory/array.go:227–270  ·  view source on GitHub ↗
(ctx *ReadContext, value reflect.Value)

Source from the content-addressed store, hash-verified

225}
226
227func (s *arrayConcreteValueSerializer) ReadData(ctx *ReadContext, value reflect.Value) {
228 buf := ctx.Buffer()
229 err := ctx.Err()
230 length := int(buf.ReadVarUint32(err))
231 if ctx.HasError() {
232 return
233 }
234 if length != value.Len() {
235 ctx.SetError(DeserializationErrorf("array length %d does not match serialized length %d", value.Len(), length))
236 return
237 }
238
239 var trackRefs bool
240 if length > 0 {
241 // Read collection flags (same format as slices)
242 collectFlag := buf.ReadInt8(err)
243 if ctx.HasError() {
244 return
245 }
246
247 // Read element type info if present
248 if (collectFlag & CollectionIsSameType) != 0 {
249 if (collectFlag & CollectionIsDeclElementType) == 0 {
250 ctx.TypeResolver().ReadTypeInfo(buf, err)
251 }
252 }
253
254 trackRefs = (collectFlag & CollectionTrackingRef) != 0
255 }
256
257 for i := 0; i < length && i < value.Len(); i++ {
258 elem := value.Index(i)
259
260 // When tracking refs, the element serializer handles ref flags
261 if trackRefs {
262 s.elemSerializer.Read(ctx, RefModeTracking, false, false, elem)
263 } else {
264 s.elemSerializer.ReadData(ctx, elem)
265 }
266 if ctx.HasError() {
267 return
268 }
269 }
270}
271
272func (s *arrayConcreteValueSerializer) Read(ctx *ReadContext, refMode RefMode, readType bool, hasGenerics bool, value reflect.Value) {
273 done := readArrayRefAndType(ctx, refMode, readType, value)

Callers 1

ReadMethod · 0.95

Calls 12

DeserializationErrorfFunction · 0.85
LenMethod · 0.80
ReadMethod · 0.65
ReadDataMethod · 0.65
BufferMethod · 0.45
ErrMethod · 0.45
ReadVarUint32Method · 0.45
HasErrorMethod · 0.45
SetErrorMethod · 0.45
ReadInt8Method · 0.45
ReadTypeInfoMethod · 0.45
TypeResolverMethod · 0.45

Tested by

no test coverage detected