|
docc 0.8.3 (0d44999b)
C++ API Reference
|
Represents a conditional if-else control flow node with multiple cases. More...
#include <sdfg/structured_control_flow/if_else.h>
Public Member Functions | |
| IfElse (const IfElse &node)=delete | |
| IfElse & | operator= (const IfElse &)=delete |
| ElementType | type_id () const override |
| Returns the type of the element. | |
| bool | accept (visitor::ActualStructuredSDFGVisitor &visitor) override |
| void | validate (const Function &function) const override |
| Validates the element. | |
| size_t | size () const |
| Returns the number of cases (if/else-if branches) in this IfElse. | |
| std::pair< const Sequence &, const symbolic::Condition > | at (size_t i) const |
| Access a case by index (const version). | |
| std::pair< Sequence &, const symbolic::Condition > | at (size_t i) |
| Access a case by index (non-const version). | |
| int | index (const Sequence &child) const |
| Find the index of a child sequence (the root seq of one of our branches). | |
| bool | is_complete () const |
| Checks if this IfElse is complete (all cases are covered). | |
| void | replace (const symbolic::Expression old_expression, const symbolic::Expression new_expression) override |
| Replace occurrences of an expression in all conditions and sequences. | |
| void | replace (const symbolic::ExpressionMapping &replacements) override |
| Public Member Functions inherited from sdfg::structured_control_flow::ControlFlowNode | |
| virtual | ~ControlFlowNode ()=default |
| ControlFlowNode * | get_parent () |
| const ControlFlowNode * | get_parent () const |
| ControlFlowNode (const ControlFlowNode &node)=delete | |
| ControlFlowNode & | operator= (const ControlFlowNode &)=delete |
| Public Member Functions inherited from sdfg::Element | |
| Element (size_t element_id, const DebugInfo &debug_info) | |
| virtual | ~Element ()=default |
| size_t | element_id () const |
| const DebugInfo & | debug_info () const |
| void | set_debug_info (const DebugInfo &debug_info) |
| void | add_metadata (const std::string &key, const std::string &value) |
| void | remove_metadata (const std::string &key) |
| const std::string & | metadata (const std::string &key) const |
| const std::string * | metadata_if_exists (const std::string &key) const |
| const std::unordered_map< std::string, std::string > & | metadata () const |
| std::string_view | element_type () const |
| Returns the type of the element as a human-readable string. | |
Static Public Member Functions | |
| static bool | classof (const Element &element) |
| Static Public Member Functions inherited from sdfg::structured_control_flow::ControlFlowNode | |
| static bool | classof (const Element &element) |
LLVM-style RTTI predicate: true if element is a ControlFlowNode. | |
| static std::vector< ControlFlowNode * > | parent_chain (ControlFlowNode &child) |
Friends | |
| class | sdfg::builder::StructuredSDFGBuilder |
Additional Inherited Members | |
| Static Public Attributes inherited from sdfg::structured_control_flow::ControlFlowNode | |
| static constexpr ElementType | TypeGroup |
| Bitmask of all concrete ElementTypes that are ControlFlowNodes. | |
| Protected Member Functions inherited from sdfg::structured_control_flow::ControlFlowNode | |
| ControlFlowNode (size_t element_id, const DebugInfo &debug_info, ControlFlowNode *parent) | |
| Protected constructor for control flow nodes with parent. | |
| Protected Attributes inherited from sdfg::structured_control_flow::ControlFlowNode | |
| ControlFlowNode * | parent_ |
| Protected Attributes inherited from sdfg::Element | |
| size_t | element_id_ |
| DebugInfo | debug_info_ |
| std::unordered_map< std::string, std::string > | metadata_ |
Represents a conditional if-else control flow node with multiple cases.
The IfElse node represents structured conditional branching in a StructuredSDFG. It consists of one or more cases, each with:
Cases are evaluated in order. At runtime, the first case whose condition evaluates to true will be executed. This is similar to if-else-if chains in programming languages.
Completeness:
An IfElse is considered "complete" if its conditions exhaustively cover all possible cases. This means that at least one condition will always be true at runtime. The is_complete() method uses conjunctive normal form (CNF) analysis to determine if the disjunction (OR) of all conditions is a tautology (always true).
Complete examples:
Incomplete examples:
|
delete |
|
overridevirtual |
Implements sdfg::structured_control_flow::ControlFlowNode.
| std::pair< Sequence &, const symbolic::Condition > sdfg::structured_control_flow::IfElse::at | ( | size_t | i | ) |
Access a case by index (non-const version).
| i | Index of the case to access (0-based) |
| std::out_of_range | if i >= size() |
| std::pair< const Sequence &, const symbolic::Condition > sdfg::structured_control_flow::IfElse::at | ( | size_t | i | ) | const |
Access a case by index (const version).
| i | Index of the case to access (0-based) |
| std::out_of_range | if i >= size() |
|
inlinestatic |
| int sdfg::structured_control_flow::IfElse::index | ( | const Sequence & | child | ) | const |
Find the index of a child sequence (the root seq of one of our branches).
| child | Child node to search for |
| bool sdfg::structured_control_flow::IfElse::is_complete | ( | ) | const |
Checks if this IfElse is complete (all cases are covered).
An IfElse is complete if the disjunction (OR) of all its conditions is a tautology, meaning at least one condition will always be true regardless of variable values.
This method uses conjunctive normal form (CNF) conversion to analyze whether the combined conditions form a tautology. Each clause in the CNF must be a tautology for the entire expression to be one.
Examples of complete IfElse nodes:
Examples of incomplete IfElse nodes:
|
delete |
|
overridevirtual |
Replace occurrences of an expression in all conditions and sequences.
| old_expression | Expression to replace |
| new_expression | Expression to replace with |
Implements sdfg::Element.
|
overridevirtual |
Reimplemented from sdfg::Element.
| size_t sdfg::structured_control_flow::IfElse::size | ( | ) | const |
Returns the number of cases (if/else-if branches) in this IfElse.
|
inlineoverridevirtual |
Returns the type of the element.
Implements sdfg::Element.
|
overridevirtual |
Validates the element.
| InvalidSDFGException | if the element is invalid |
Implements sdfg::Element.
|
friend |