diff options
| author | Peter LaFosse <peter@vector35.com> | 2023-05-26 14:37:37 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2023-05-26 14:37:44 -0400 |
| commit | 86b0f8473076eb12c86b710f24140b2e6aaf00c3 (patch) | |
| tree | c78a9b718dd532ad3ef0e36f641b9221fe0cee42 /python/binaryview.py | |
| parent | b7b7d7331d572a35ba00623b4dfecd80b52d554d (diff) | |
Add iterators for TypedDataAccessor and DataVariable
Diffstat (limited to 'python/binaryview.py')
| -rw-r--r-- | python/binaryview.py | 13 |
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 |
