blueloveTH 979b7f4a67 ...
2023-09-27 10:28:39 +08:00

28 lines
1014 B
Python

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.sizeof() != self.item_size:
raise ValueError(f"array item size mismatch: {value.sizeof()} != {self.item_size}")
p = self.addr() + self.item_size * index
p.write_struct(value)
def __len__(self) -> int:
return self.item_count