| 123456789101112131415161718192021222324252627 |
- class array(struct):
- item_count: int
- item_size: int
- def __new__(cls, item_count: int, item_size: int = 1):
- obj = struct.__new__(cls, item_count * item_size)
- obj._enable_instance_dict()
- obj.item_count = item_count
- obj.item_size = item_size
- return obj
-
- def __getitem__(self, index: int) -> struct:
- if index < 0 or index >= self.item_count:
- raise IndexError("array index out of range")
- p = self.addr() + self.item_size * index
- return p.read_struct(self.item_size)
-
- def __setitem__(self, index: int, value: struct) -> None:
- if index < 0 or index >= self.item_count:
- raise IndexError("array index out of range")
- if value.size() != self.item_size:
- raise ValueError(f"array item size mismatch: {value.size()} != {self.item_size}")
- p = self.addr() + self.item_size * index
- p.write_struct(value)
- def __len__(self) -> int:
- return self.item_count
|