(self, buffer, value)
| 732 | super().__init__(type_resolver, cls) |
| 733 | |
| 734 | def write(self, buffer, value): |
| 735 | try: |
| 736 | itemsize, ftype, type_id = typecode_dict[value.typecode] |
| 737 | except KeyError as exc: |
| 738 | raise TypeError(f"Unsupported array.array typecode {value.typecode!r}") from exc |
| 739 | if value.itemsize != itemsize: |
| 740 | raise TypeError(f"array.array typecode {value.typecode!r} has itemsize {value.itemsize}, expected {itemsize}") |
| 741 | view = memoryview(value) |
| 742 | nbytes = len(value) * itemsize |
| 743 | buffer.write_uint8(type_id) |
| 744 | buffer.write_var_uint32(nbytes) |
| 745 | if not view.c_contiguous: |
| 746 | data = value.tobytes() |
| 747 | if not is_little_endian and itemsize > 1: |
| 748 | swapped = array.array(value.typecode, []) |
| 749 | swapped.frombytes(data) |
| 750 | swapped.byteswap() |
| 751 | data = swapped.tobytes() |
| 752 | buffer.write_bytes(data) |
| 753 | elif is_little_endian or itemsize == 1: |
| 754 | buffer.write_buffer(value) |
| 755 | else: |
| 756 | # Swap bytes on big-endian machines for multi-byte types |
| 757 | swapped = array.array(value.typecode, value) |
| 758 | swapped.byteswap() |
| 759 | buffer.write_buffer(swapped) |
| 760 | |
| 761 | def read(self, buffer): |
| 762 | type_id = buffer.read_uint8() |
nothing calls this directly
no test coverage detected