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

Class PyArraySerializer

python/pyfory/serializer.py:540–582  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

538
539
540class PyArraySerializer(Serializer):
541 typecode_dict = typecode_dict
542 typecodearray_type = {typecode: ftype for typecode, (_itemsize, ftype, _type_id) in typecode_dict.items()}
543
544 def __init__(self, type_resolver, ftype, type_id: str):
545 super().__init__(type_resolver, ftype)
546 self.typecode = typeid_code[type_id]
547 self.itemsize, ftype, self.type_id = typecode_dict[self.typecode]
548
549 def _array_type_id(self, value):
550 entry = typecode_dict.get(value.typecode)
551 if entry is None:
552 raise TypeError(f"Unsupported array.array typecode {value.typecode!r}")
553 itemsize, _ftype, type_id = entry
554 if value.itemsize != itemsize:
555 raise TypeError(f"array.array typecode {value.typecode!r} has itemsize {value.itemsize}, expected {itemsize}")
556 return type_id
557
558 def write(self, buffer, value):
559 actual_type_id = self._array_type_id(value)
560 if actual_type_id != self.type_id:
561 raise TypeError(f"array.array typecode {value.typecode!r} maps to type id {actual_type_id}, expected {self.type_id}")
562 view = memoryview(value)
563 assert view.itemsize == self.itemsize
564 assert view.c_contiguous # TODO handle contiguous
565 nbytes = len(value) * self.itemsize
566 buffer.write_var_uint32(nbytes)
567 if is_little_endian or self.itemsize == 1:
568 buffer.write_buffer(value)
569 else:
570 # Swap bytes on big-endian machines for multi-byte types
571 swapped = array.array(self.typecode, value)
572 swapped.byteswap()
573 buffer.write_buffer(swapped)
574
575 def read(self, buffer):
576 data = buffer.read_bytes_and_size()
577 arr = array.array(self.typecode, [])
578 arr.frombytes(data)
579 if not is_little_endian and self.itemsize > 1:
580 # Swap bytes on big-endian machines for multi-byte types
581 arr.byteswap()
582 return arr
583
584
585FORY_ARRAY_WRAPPERS = {

Callers 3

visit_arrayMethod · 0.90
_initialize_commonMethod · 0.90

Calls 1

itemsMethod · 0.80

Tested by

no test coverage detected