mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
28 lines
1014 B
Python
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
|