`_FieldType`: add `size_is_dynamic` property
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 3 Sep 2020 15:47:33 +0000 (11:47 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 3 Sep 2020 15:47:33 +0000 (11:47 -0400)
This new property indicates if the field type's size is static or
dynamic.

A string field type has a dynamic size, as well as any structure field
type which contains one, recursively. As of this version, all other
field types have static sizes.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
barectf/config.py

index 1920c87f3a35c55c61c9ade81006b7164a3aa829..6772de927ce4d16ea091c1f68c9365eb06c58e78 100644 (file)
@@ -43,6 +43,10 @@ class _FieldType:
     def alignment(self) -> Alignment:
         raise NotImplementedError
 
+    @property
+    def size_is_dynamic(self):
+        return False
+
 
 class _BitArrayFieldType(_FieldType):
     def __init__(self, size: Count, byte_order: Optional[ByteOrder] = None,
@@ -193,6 +197,10 @@ class StringFieldType(_FieldType):
     def alignment(self) -> Alignment:
         return Alignment(8)
 
+    @property
+    def size_is_dynamic(self):
+        return True
+
 
 class _ArrayFieldType(_FieldType):
     def __init__(self, element_field_type: _FieldType):
@@ -273,6 +281,10 @@ class StructureFieldType(_FieldType):
     def alignment(self) -> Alignment:
         return self._alignment
 
+    @property
+    def size_is_dynamic(self):
+        return any([member.field_type.size_is_dynamic for member in self.members.values()])
+
     @property
     def members(self) -> StructureFieldTypeMembers:
         return self._members
This page took 0.023551 seconds and 4 git commands to generate.