MCPcopy Index your code
hub / github.com/apache/fory / write

Method write

python/pyfory/collection.py:350–454  ·  view source on GitHub ↗
(self, write_context, obj)

Source from the content-addressed store, hash-verified

348 self.value_tracking_ref = bool(value_tracking_ref) and type_resolver.track_ref
349
350 def write(self, write_context, obj):
351 length = len(obj)
352 write_context.write_var_uint32(length)
353 if length == 0:
354 return
355 type_resolver = self.type_resolver
356 ref_writer = write_context.ref_writer
357 key_serializer = self.key_serializer
358 value_serializer = self.value_serializer
359
360 items_iter = iter(obj.items())
361 key, value = next(items_iter)
362 has_next = True
363 while has_next:
364 while True:
365 if key is not None:
366 if value is not None:
367 break
368 if key_serializer is not None:
369 key_write_ref = self.key_tracking_ref
370 if key_write_ref:
371 write_context.write_int8(NULL_VALUE_KEY_DECL_TYPE_TRACKING_REF)
372 if not ref_writer.write_ref_or_null(write_context, key):
373 self._write_obj(key_serializer, write_context, key)
374 else:
375 write_context.write_int8(NULL_VALUE_KEY_DECL_TYPE)
376 self._write_obj(key_serializer, write_context, key)
377 else:
378 write_context.write_int8(VALUE_HAS_NULL | TRACKING_KEY_REF)
379 write_context.write_ref(key)
380 else:
381 if value is not None:
382 if value_serializer is not None:
383 value_write_ref = self.value_tracking_ref
384 if value_write_ref:
385 write_context.write_int8(NULL_KEY_VALUE_DECL_TYPE_TRACKING_REF)
386 if not ref_writer.write_ref_or_null(write_context, value):
387 value_serializer.write(write_context, value)
388 else:
389 write_context.write_int8(NULL_KEY_VALUE_DECL_TYPE)
390 value_serializer.write(write_context, value)
391 else:
392 write_context.write_int8(KEY_HAS_NULL | TRACKING_VALUE_REF)
393 write_context.write_ref(value)
394 else:
395 write_context.write_int8(KV_NULL)
396 try:
397 key, value = next(items_iter)
398 except StopIteration:
399 has_next = False
400 break
401
402 if not has_next:
403 break
404
405 key_cls = type(key)
406 value_cls = type(value)
407 write_context.enter_flush_barrier()

Callers

nothing calls this directly

Calls 14

_write_objMethod · 0.95
boolFunction · 0.85
itemsMethod · 0.80
write_refMethod · 0.80
writeMethod · 0.65
write_var_uint32Method · 0.45
write_int8Method · 0.45
write_ref_or_nullMethod · 0.45
enter_flush_barrierMethod · 0.45
write_int16Method · 0.45
get_type_infoMethod · 0.45
write_type_infoMethod · 0.45

Tested by

no test coverage detected