Class representing a pointer to a C array.
| 198 | |
| 199 | |
| 200 | class CArrayPointer(_CDeref[List[T]], BaseCPointer[List[T]]): |
| 201 | """Class representing a pointer to a C array.""" |
| 202 | |
| 203 | def __init__( |
| 204 | self, |
| 205 | address: int, |
| 206 | size: int, |
| 207 | length: int, |
| 208 | typ: Type[T], |
| 209 | ): |
| 210 | self._length = length |
| 211 | self._type = typ |
| 212 | self._decref = False |
| 213 | super().__init__(address, size) |
| 214 | |
| 215 | @property |
| 216 | def decref(self) -> bool: |
| 217 | return self._decref |
| 218 | |
| 219 | @property |
| 220 | @handle |
| 221 | def _as_parameter_(self) -> "ctypes.Array[ctypes._CData]": |
| 222 | ctype = get_mapped(self._type) |
| 223 | |
| 224 | deref = (ctype * self._length).from_address(self.ensure()) |
| 225 | return deref |
| 226 | |
| 227 | @handle |
| 228 | def dereference(self) -> List[T]: |
| 229 | """Dereference the pointer.""" |
| 230 | array = self._as_parameter_ |
| 231 | return [array[i] for i in range(self._length)] # type: ignore |
| 232 | |
| 233 | def __repr__(self) -> str: |
| 234 | return f"CArrayPointer(address={self.address}, size={self.size})" |
| 235 | |
| 236 | def __getitem__(self, index: int) -> T: |
| 237 | array = ~self |
| 238 | return array[index] |
| 239 | |
| 240 | |
| 241 | @handle |