Source code for ifgen.environment.padding

"""
A module implementing a struct-padding manager.
"""

# built-in
from typing import Any, Iterator

StructField = dict[str, Any]


[docs] def type_string(data: str) -> str: """Handle some type name conversions.""" if "int" in data: data = data.replace("_t", "") return data
[docs] class PaddingManager: """A class implementing basic padding management.""" base_name = "reserved_padding" def __init__(self) -> None: """Initialize this instance.""" self.reset() def _new_field(self) -> StructField: """Create a new padding field.""" field: StructField = { "padding": True, "volatile": False, "const": True, "name": f"{self.base_name}{self.index}", } self.index += 1 return field
[docs] def add_padding(self, num_bytes: int) -> Iterator[StructField]: """Add padding field(s).""" words, single_bytes = divmod(num_bytes, 4) for size, kind in (words, "uint32_t"), (single_bytes, "uint8_t"): if size > 0: field = self._new_field() field["type"] = kind if size >= 2: field["array_length"] = size yield field
[docs] def reset(self) -> None: """Reset the padding-element index.""" self.index = 0