summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/binaryview.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/python/binaryview.py b/python/binaryview.py
index 68263acd..6cb66bdb 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -9038,6 +9038,14 @@ class TypedDataAccessor:
def __bool__(self):
return bool(self.int_from_bytes(bytes(self), len(self), False))
+ def __iter__(self):
+ _type = self.type
+ if not isinstance(_type, _types.ArrayType):
+ raise ValueError("Can't iterate over non-array")
+
+ for i in range(_type.count):
+ yield self[i]
+
def __getitem__(self, key: Union[str, int]) -> 'TypedDataAccessor':
_type = self.type
if isinstance(_type, _types.NamedTypeReferenceType):
@@ -9154,7 +9162,7 @@ class TypedDataAccessor:
return bytes(self)
if _type.element_type.width == 2 and _type.element_type.type_class == TypeClass.WideCharTypeClass:
return bytes(self).decode(f"utf-16-{'le' if self.endian == Endianness.LittleEndian else 'be'}")
- for offset in range(0, len(_type), _type.element_type.width):
+ for offset in range(0, len(_type) - 1, _type.element_type.width):
result.append(
TypedDataAccessor(_type.element_type, self.address + offset, self.view, self.endian).value
)
@@ -9237,6 +9245,9 @@ class DataVariable(CoreDataVariable):
def __getitem__(self, item: str):
return self._accessor[item]
+ def __iter__(self):
+ return iter(self._accessor)
+
@property
def type(self) -> '_types.Type':
return self._type