@@ -13,6 +13,7 @@ class Field:
1313 containing_type : Optional [Any ]
1414 type_size : Optional [int ]
1515 bitfield_size : Optional [int ]
16+ offset : int
1617 value : Any = None
1718 ready : bool = False
1819
@@ -60,6 +61,10 @@ def set_bitfield_size(self, bitfield_size: Any, mark_ready: bool = False) -> Non
6061 if mark_ready :
6162 self .ready = True
6263
64+ def set_offset (self , offset : int ) -> None :
65+ """Set the offset of this field"""
66+ self .offset = offset
67+
6368
6469@dataclass
6570class DependencyNode :
@@ -109,6 +114,7 @@ class DependencyNode:
109114 depends_on : Optional [list [str ]] = None
110115 fields : Dict [str , Field ] = field (default_factory = dict )
111116 _ready_cache : Optional [bool ] = field (default = None , repr = False )
117+ current_offset : int = 0
112118
113119 def add_field (
114120 self ,
@@ -120,6 +126,7 @@ def add_field(
120126 ctype_complex_type : Optional [int ] = None ,
121127 bitfield_size : Optional [int ] = None ,
122128 ready : bool = False ,
129+ offset : int = 0 ,
123130 ) -> None :
124131 """Add a field to the node with an optional initial value and readiness state."""
125132 if self .depends_on is None :
@@ -133,6 +140,7 @@ def add_field(
133140 type_size = type_size ,
134141 ctype_complex_type = ctype_complex_type ,
135142 bitfield_size = bitfield_size ,
143+ offset = offset
136144 )
137145 # Invalidate readiness cache
138146 self ._ready_cache = None
@@ -209,9 +217,14 @@ def set_field_ready(self, name: str, is_ready: bool = False) -> None:
209217 raise KeyError (f"Field '{ name } ' does not exist in node '{ self .name } '" )
210218
211219 self .fields [name ].set_ready (is_ready )
220+ self .fields [name ].set_offset (self .current_offset )
221+ self .current_offset += self ._calculate_size (name )
222+
212223 # Invalidate readiness cache
213224 self ._ready_cache = None
214225
226+ def _calculate_size (self , name : str ) -> int :
227+ pass
215228 @property
216229 def is_ready (self ) -> bool :
217230 """Check if the node is ready (all fields are ready)."""
0 commit comments