+
+ # Handles the fixed-length integer item `item`.
+ def _handle_fl_float_item(self, val: float, item: _FlNum, state: _GenState):
+ # Validate length
+ if item.len not in (32, 64):
+ _raise_error_for_item(
+ "Invalid {}-bit length for a fixed-length floating point number (value {:,})".format(
+ item.len, val
+ ),
+ item,
+ )
+
+ # Encode result
+ self._data += struct.pack(
+ "{}{}".format(
+ ">" if state.bo in (None, ByteOrder.BE) else "<",
+ "f" if item.len == 32 else "d",
+ ),
+ val,
+ )
+
+ # Handles the fixed-length number item `item`.
+ def _handle_fl_num_item(
+ self, item: _FlNum, state: _GenState, next_vl_instance: int
+ ):
+ # Compute value
+ val = self._eval_item_expr(item, state, True, True)
+
+ # Validate current byte order
+ if state.bo is None and item.len > 8:
+ _raise_error_for_item(
+ "Current byte order isn't defined at first fixed-length number (`{}`) to encode on more than 8 bits".format(
+ item.expr_str
+ ),
+ item,
+ )
+
+ # Handle depending on type
+ if type(val) is int:
+ self._handle_fl_int_item(val, item, state)
+ else:
+ assert type(val) is float
+ self._handle_fl_float_item(val, item, state)
+
+ # Update offset
+ state.offset += item.size
+