1
0

c.py 1010 B

123456789101112131415161718192021222324252627
  1. class array(struct):
  2. item_count: int
  3. item_size: int
  4. def __new__(cls, item_count: int, item_size: int = 1):
  5. obj = struct.__new__(cls, item_count * item_size)
  6. obj._enable_instance_dict()
  7. obj.item_count = item_count
  8. obj.item_size = item_size
  9. return obj
  10. def __getitem__(self, index: int) -> struct:
  11. if index < 0 or index >= self.item_count:
  12. raise IndexError("array index out of range")
  13. p = self.addr() + self.item_size * index
  14. return p.read_struct(self.item_size)
  15. def __setitem__(self, index: int, value: struct) -> None:
  16. if index < 0 or index >= self.item_count:
  17. raise IndexError("array index out of range")
  18. if value.size() != self.item_size:
  19. raise ValueError(f"array item size mismatch: {value.size()} != {self.item_size}")
  20. p = self.addr() + self.item_size * index
  21. p.write_struct(value)
  22. def __len__(self) -> int:
  23. return self.item_count