MCPcopy Create free account
hub / github.com/URLab-Sim/UnrealRoboticsLab / emit_enum_switch

Function emit_enum_switch

Scripts/codegen/generate_ue_components.py:755–806  ·  view source on GitHub ↗

Emit ``switch (discriminator) { case Enum::M: ; break; ... }``. ``cases`` is a sequence of ``(member_or_members, body)`` pairs: - When ``member_or_members`` is a ``str``, the case label + body + break collapse onto one line: ``case Enum::M: ; break;``. - When it

(
    discriminator: str,
    enum_name: str,
    cases: Sequence[Tuple[Any, str]],
    *,
    indent: str = "    ",
    default_break: bool = False,
    default_body: Optional[str] = None,
)

Source from the content-addressed store, hash-verified

753
754
755def emit_enum_switch(
756 discriminator: str,
757 enum_name: str,
758 cases: Sequence[Tuple[Any, str]],
759 *,
760 indent: str = " ",
761 default_break: bool = False,
762 default_body: Optional[str] = None,
763) -> str:
764 """Emit ``switch (discriminator) { case Enum::M: <body>; break; ... }``.
765
766 ``cases`` is a sequence of ``(member_or_members, body)`` pairs:
767 - When ``member_or_members`` is a ``str``, the case label + body +
768 break collapse onto one line: ``case Enum::M: <body>; break;``.
769 - When it is a sequence of strings (multi-key group, e.g. objtype
770 dispatch&#x27;s BODY/XBODY → ``mjOBJ_BODY``), the case labels stack
771 and the body / break go on separate indented lines:
772 ``case Enum::A:``
773 ``case Enum::B:``
774 `` <body>;``
775 `` break;``
776
777 ``default_break=True`` appends a single-line ``default: break;``.
778 ``default_body`` (when set) appends a multi-line ``default:`` arm
779 with that body. ``default_break`` is ignored if ``default_body`` is
780 given.
781
782 All lines are prefixed with ``indent``; case labels use
783 ``indent + 4 spaces``; multi-line bodies use ``indent + 8 spaces``.
784 Result ends with a trailing newline.
785 """
786 inner = indent + " "
787 body_indent = inner + " "
788 lines: List[str] = []
789 lines.append(f"{indent}switch ({discriminator})")
790 lines.append(f"{indent}{{")
791 for members, body in cases:
792 if isinstance(members, str):
793 lines.append(f"{inner}case {enum_name}::{members}: {body}; break;")
794 continue
795 for m in members:
796 lines.append(f"{inner}case {enum_name}::{m}:")
797 lines.append(f"{body_indent}{body};")
798 lines.append(f"{body_indent}break;")
799 if default_body is not None:
800 lines.append(f"{inner}default:")
801 lines.append(f"{body_indent}{default_body};")
802 lines.append(f"{body_indent}break;")
803 elif default_break:
804 lines.append(f"{inner}default: break;")
805 lines.append(f"{indent}}}")
806 return "\n".join(lines) + "\n"
807
808
809def _emit_xml_enum_export(attr: str, enum_def: Dict[str, Any]) -> str:

Callers 3

_emit_xml_enum_exportFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected